Sovr Sov
Sovr Sov

Reputation: 196

opencv issue with vs 2013 C++

I am using opencv 2.4.8 with visual studio 2013. I have been trying to get my application to run. I know for sure the code works, but I am having linker issues I believe...

here is the error I get:

    Error   1   error LNK2019: unresolved external symbol _cvCreateImage referenced in function "void __cdecl getBinaryImage(void)" (?getBinaryImage@@YAXXZ)    C:\Users\Parker\documents\visual studio 2013\Projects\PAD_visualEngine\PAD_visualEngine\Source.obj  PAD_visualEngine
    Error   2   error LNK2019: unresolved external symbol _cvInRangeS referenced in function "void __cdecl getBinaryImage(void)" (?getBinaryImage@@YAXXZ)   C:\Users\Parker\documents\visual studio  2013\Projects\PAD_visualEngine\PAD_visualEngine\Source.obj PAD_visualEngine
    Error   3   error LNK2019: unresolved external symbol "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl cv::format(char const *,...)" (?format@cv@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PBDZZ) referenced in function __catch$?getFace@@YAXXZ$0 C:\Users\Parker\documents\visual studio 2013\Projects\PAD_visualEngine\PAD_visualEngine\Source.obj  PAD_visualEngine
    Error   4   error LNK2019: unresolved external symbol "void __cdecl cv::fastFree(void *)" (?fastFree@cv@@YAXPAX@Z) referenced in function "public: __thiscall cv::Mat::~Mat(void)" (??1Mat@cv@@QAE@XZ)  C:\Users\Parker\documents\visual studio 2013\Projects\PAD_visualEngine\PAD_visualEngine\Source.obj  PAD_visualEngine
    Error   5   error LNK2019: unresolved external symbol "public: __thiscall cv::_InputArray::_InputArray(class cv::Mat const &)" (??0_InputArray@cv@@QAE@ABVMat@1@@Z) referenced in function __catch$?getFace@@YAXXZ$0    C:\Users\Parker\documents\visual studio 2013\Projects\PAD_visualEngine\PAD_visualEngine\Source.obj  PAD_visualEngine
    Error   6   error LNK2019: unresolved external symbol "public: __thiscall cv::_InputArray::_InputArray(class std::vector<class cv::Mat,class std::allocator<class cv::Mat> > const &)" (??0_InputArray@cv@@QAE@ABV?$vector@VMat@cv@@V?$allocator@VMat@cv@@@std@@@std@@@Z) referenced in function __catch$?getFace@@YAXXZ$0  C:\Users\Parker\documents\visual studio 2013\Projects\PAD_visualEngine\PAD_visualEngine\Source.obj  PAD_visualEngine
    Error   7   error LNK2001: unresolved external symbol "public: virtual class cv::Mat __thiscall cv::_InputArray::getMat(int)const " (?getMat@_InputArray@cv@@UBE?AVMat@2@H@Z)   C:\Users\Parker\documents\visual studio 2013\Projects\PAD_visualEngine\PAD_visualEngine\Source.obj  PAD_visualEngine
    Error   8   error LNK2001: unresolved external symbol "public: virtual void __thiscall cv::_InputArray::getMatVector(class std::vector<class cv::Mat,class std::allocator<class cv::Mat> > &)const " (?getMatVector@_InputArray@cv@@UBEXAAV?$vector@VMat@cv@@V?$allocator@VMat@cv@@@std@@@std@@@Z)  C:\Users\Parker\documents\visual studio 2013\Projects\PAD_visualEngine\PAD_visualEngine\Source.obj  PAD_visualEngine
    Error   9   error LNK2001: unresolved external symbol "public: virtual class cv::GlBuffer __thiscall cv::_InputArray::getGlBuffer(void)const " (?getGlBuffer@_InputArray@cv@@UBE?AVGlBuffer@2@XZ)   C:\Users\Parker\documents\visual studio 2013\Projects\PAD_visualEngine\PAD_visualEngine\Source.obj  PAD_visualEngine
    Error   10  error LNK2001: unresolved external symbol "public: virtual class cv::GlTexture __thiscall cv::_InputArray::getGlTexture(void)const " (?getGlTexture@_InputArray@cv@@UBE?AVGlTexture@2@XZ)   C:\Users\Parker\documents\visual studio 2013\Projects\PAD_visualEngine\PAD_visualEngine\Source.obj  PAD_visualEngine
    Error   11  error LNK2001: unresolved external symbol "public: virtual class cv::gpu::GpuMat __thiscall cv::_InputArray::getGpuMat(void)const " (?getGpuMat@_InputArray@cv@@UBE?AVGpuMat@gpu@2@XZ)  C:\Users\Parker\documents\visual studio 2013\Projects\PAD_visualEngine\PAD_visualEngine\Source.obj  PAD_visualEngine
    Error   12  error LNK2001: unresolved external symbol "public: virtual int __thiscall cv::_InputArray::kind(void)const " (?kind@_InputArray@cv@@UBEHXZ) C:\Users\Parker\documents\visual studio 2013\Projects\PAD_visualEngine\PAD_visualEngine\Source.obj  PAD_visualEngine
    Error   13  error LNK2001: unresolved external symbol "public: virtual class cv::Size_<int> __thiscall cv::_InputArray::size(int)const " (?size@_InputArray@cv@@UBE?AV?$Size_@H@2@H@Z)  C:\Users\Parker\documents\visual studio 2013\Projects\PAD_visualEngine\PAD_visualEngine\Source.obj  PAD_visualEngine
    Error   14  error LNK2001: unresolved external symbol "public: virtual unsigned int __thiscall cv::_InputArray::total(int)const " (?total@_InputArray@cv@@UBEIH@Z)  C:\Users\Parker\documents\visual studio 2013\Projects\PAD_visualEngine\PAD_visualEngine\Source.obj  PAD_visualEngine
    Error   15  error LNK2001: unresolved external symbol "public: virtual int __thiscall cv::_InputArray::type(int)const " (?type@_InputArray@cv@@UBEHH@Z) C:\Users\Parker\documents\visual studio 2013\Projects\PAD_visualEngine\PAD_visualEngine\Source.obj  PAD_visualEngine
    Error   16  error LNK2001: unresolved external symbol "public: virtual int __thiscall cv::_InputArray::depth(int)const " (?depth@_InputArray@cv@@UBEHH@Z)   C:\Users\Parker\documents\visual studio 2013\Projects\PAD_visualEngine\PAD_visualEngine\Source.obj  PAD_visualEngine
    Error   17  error LNK2001: unresolved external symbol "public: virtual int __thiscall cv::_InputArray::channels(int)const " (?channels@_InputArray@cv@@UBEHH@Z) C:\Users\Parker\documents\visual studio 2013\Projects\PAD_visualEngine\PAD_visualEngine\Source.obj  PAD_visualEngine
    Error   18  error LNK2001: unresolved external symbol "public: virtual bool __thiscall cv::_InputArray::empty(void)const " (?empty@_InputArray@cv@@UBE_NXZ) C:\Users\Parker\documents\visual studio 2013\Projects\PAD_visualEngine\PAD_visualEngine\Source.obj  PAD_visualEngine
    Error   19  error LNK2019: unresolved external symbol "public: void __thiscall cv::Mat::deallocate(void)" (?deallocate@Mat@cv@@QAEXXZ) referenced in function "public: void __thiscall cv::Mat::release(void)" (?release@Mat@cv@@QAEXXZ)    C:\Users\Parker\documents\visual studio 2013\Projects\PAD_visualEngine\PAD_visualEngine\Source.obj  PAD_visualEngine
    Error   20  error LNK2019: unresolved external symbol "public: void __thiscall cv::Mat::copySize(class cv::Mat const &)" (?copySize@Mat@cv@@QAEXABV12@@Z) referenced in function "public: __thiscall cv::Mat::Mat(class cv::Mat const &)" (??0Mat@cv@@QAE@ABV01@@Z) C:\Users\Parker\documents\visual studio 2013\Projects\PAD_visualEngine\PAD_visualEngine\Source.obj  PAD_visualEngine
    Error   21  error LNK2019: unresolved external symbol "public: void __thiscall cv::Algorithm::set(char const *,double)" (?set@Algorithm@cv@@QAEXPBDN@Z) referenced in function __catch$?getFace@@YAXXZ$0    C:\Users\Parker\documents\visual studio 2013\Projects\PAD_visualEngine\PAD_visualEngine\Source.obj  PAD_visualEngine
    Error   22  error LNK2019: unresolved external symbol "int __cdecl cv::_interlockedExchangeAdd(int *,int)" (?_interlockedExchangeAdd@cv@@YAHPAHH@Z) referenced in function "public: __thiscall cv::Mat::Mat(class cv::Mat const &)" (??0Mat@cv@@QAE@ABV01@@Z)   C:\Users\Parker\documents\visual studio 2013\Projects\PAD_visualEngine\PAD_visualEngine\Source.obj  PAD_visualEngine
    Error   23  error LNK2019: unresolved external symbol _cvCvtColor referenced in function "void __cdecl getBinaryImage(void)" (?getBinaryImage@@YAXXZ)   C:\Users\Parker\documents\visual studio 2013\Projects\PAD_visualEngine\PAD_visualEngine\Source.obj  PAD_visualEngine
    Error   24  error LNK2019: unresolved external symbol _cvShowImage referenced in function "void __cdecl getBinaryImage(void)" (?getBinaryImage@@YAXXZ)  C:\Users\Parker\documents\visual studio 2013\Projects\PAD_visualEngine\PAD_visualEngine\Source.obj  PAD_visualEngine
    Error   25  error LNK2019: unresolved external symbol _cvLoadImage referenced in function "void __cdecl getBinaryImage(void)" (?getBinaryImage@@YAXXZ)  C:\Users\Parker\documents\visual studio 2013\Projects\PAD_visualEngine\PAD_visualEngine\Source.obj  PAD_visualEngine
    Error   26  error LNK2019: unresolved external symbol _cvSaveImage referenced in function "void __cdecl getBinaryImage(void)" (?getBinaryImage@@YAXXZ)  C:\Users\Parker\documents\visual studio 2013\Projects\PAD_visualEngine\PAD_visualEngine\Source.obj  PAD_visualEngine
    Error   27  error LNK2019: unresolved external symbol _cvWaitKey referenced in function "void __cdecl getBinaryImage(void)" (?getBinaryImage@@YAXXZ)    C:\Users\Parker\documents\visual studio 2013\Projects\PAD_visualEngine\PAD_visualEngine\Source.obj  PAD_visualEngine
    Error   28  error LNK2019: unresolved external symbol _cvCreateCameraCapture referenced in function _main   C:\Users\Parker\documents\visual studio 2013\Projects\PAD_visualEngine\PAD_visualEngine\Source.obj  PAD_visualEngine
    Error   29  error LNK2019: unresolved external symbol _cvQueryFrame referenced in function _main    C:\Users\Parker\documents\visual studio 2013\Projects\PAD_visualEngine\PAD_visualEngine\Source.obj  PAD_visualEngine
    Error   30  error LNK2019: unresolved external symbol "class cv::Mat __cdecl cv::imread(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int)" (?imread@cv@@YA?AVMat@1@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z) referenced in function "void __cdecl read_csv(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::vector<class cv::Mat,class std::allocator<class cv::Mat> > &,class std::vector<int,class std::allocator<int> > &,char)" (?read_csv@@YAXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAV?$vector@VMat@cv@@V?$allocator@VMat@cv@@@std@@@2@AAV?$vector@HV?$allocator@H@std@@@2@D@Z) C:\Users\Parker\documents\visual studio 2013\Projects\PAD_visualEngine\PAD_visualEngine\Source.obj  PAD_visualEngine
    Error   31  error LNK2019: unresolved external symbol "class cv::Ptr<class cv::FaceRecognizer> __cdecl cv::createLBPHFaceRecognizer(int,int,int,int,double)" (?createLBPHFaceRecognizer@cv@@YA?AV?$Ptr@VFaceRecognizer@cv@@@1@HHHHN@Z) referenced in function __catch$?getFace@@YAXXZ$0 C:\Users\Parker\documents\visual studio 2013\Projects\PAD_visualEngine\PAD_visualEngine\Source.obj  PAD_visualEngine
    Error   32  error LNK1120: 31 unresolved externals  C:\Users\Parker\documents\visual studio 2013\Projects\PAD_visualEngine\Debug\PAD_visualEngine.exe   PAD_visualEngine

I had a 2012 vs application of this project and it worked just fine, The steps I have done is setting the Additional library Directories as "C:\opencv\build\x86\vc12\lib" and the additional Include Directories as "C:\opencv\build\include". For safe measures I also set the path as C:\opencv. I don't really know what I am forgetting? I thank you in advance for the help!

here is the code:

    #include "opencv2/opencv.hpp"
    #include "opencv2/imgproc/imgproc.hpp"
    #include "opencv2/imgproc/imgproc_c.h"
    #include "opencv2/contrib/contrib.hpp"
    #include "opencv2/highgui/highgui.hpp"
    #include <stdio.h>
    #include <iostream>
    #include <fstream>
    #include <sstream>


    using namespace std;
    using namespace cv;

    #define CV_IMWRITE_JPEG_QUALITY 1
    #define CV_IMWRITE_PNG_COMPRESSION 16
    #define CV_IMWRITE_PXM_BINARY 32
    vector<Mat> images;
    vector<int> labels;

    void getBinaryImage()
    {
        IplImage *gray, *binary, *dest, *a;
        a = cvLoadImage("out2.jpg");
        gray = cvCreateImage(cvSize(a->width, a->height), IPL_DEPTH_8U, 1);
        //binary=cvCreateImage(cvSize(a->width,a->height), IPL_DEPTH_8U,1);
        dest = cvCreateImage(cvSize(a->width, a->height), IPL_DEPTH_8U, 1);

        cvCvtColor(a, gray, CV_BGR2GRAY);
        //cvThreshold(gray,binary,30,255,THRESH_BINARY);

        cvInRangeS(a, cvScalar(1, 1, 1), cvScalar(120, 100, 300), dest);
        cvSaveImage("out2_gray.jpg", dest);
        cvShowImage("inrangGray", dest);
        cvWaitKey(0);

    }

    void read_csv(const string& filename, vector<Mat>& images, vector<int>& labels, char  separator = ';')
    {
        std::ifstream file(filename.c_str(), ifstream::in);
        if (!file){
              string error = "no valid input csv file";
              cout << error;
        }

        string line, path, classlabel;
        while (getline(file, line)){
            stringstream liness(line);
            getline(liness, path, separator);
            getline(liness, classlabel);
            if (!path.empty() && !classlabel.empty()){
                images.push_back(imread(path, 0));
                labels.push_back(atoi(classlabel.c_str()));
            }
        }
    }

    void getFace()
    {
        try{
            read_csv("file.csv", images, labels);
        }
        catch (cv::Exception& e){
            cerr << "error opening file info.csv";
            exit(1);
        }
        try{
            if (images.size() <= 1){
                string error = "this app needs at leaset 2 images";
                cout << error;
            }

            int height = images[0].rows;
            Mat testImage = images[images.size() - 1];
            int testLab = labels[labels.size() - 1];
            images.pop_back();
            labels.pop_back();
            Ptr<FaceRecognizer>model = createLBPHFaceRecognizer();
            model->train(images, labels);
            int predictedlabel = model->predict(testImage);
            string result = format("predicted=%d/ actual=%d", predictedlabel, testLab);
            cout << result << endl;
            model->set("threshold", 0.0);
            predictedlabel = model->predict(testImage);
            cout << "predicted class = " << predictedlabel << endl;
        }
        catch (cv::Exception& e){
            cerr << "overall error";
        }

    }


    int main(int argc, char** argv)
    {
        /*VideoCapture cap;
        // open the default camera, use something different from 0 otherwise;
        // Check VideoCapture documentation.
        if(!cap.open(0))
                return 0;
        for(;;)
        {
                Mat frame;
                cap >> frame;
                if( frame.empty() ) break; // end of video stream
                imshow("capture", frame);

                if( (waitKey() & 255) == 27 ) break; // stop capturing by pressing ESC
         }
        // the camera will be closed automatically upon exit
        // cap.close();
        return 0; */
        int p[3];
        CvCapture *pCapturedImage = cvCreateCameraCapture(-1);
        IplImage *pSaveImg = cvQueryFrame(pCapturedImage);
        pSaveImg = cvQueryFrame(pCapturedImage);
        p[0] = CV_IMWRITE_JPEG_QUALITY;
        p[1] = 100;
        p[2] = 0;

        //cvSaveImage("out2.jpg", pSaveImg, p);
        //getBinaryImage();
        getFace();
        return 0;
    }

Upvotes: 0

Views: 4978

Answers (2)

cmm user
cmm user

Reputation: 2616

Check if your platform is win32 or x64(Solution Properties-->Configuration -->Platform column). I faced similar issue when my platform was win32 and the linker was trying to link using x64.

Upvotes: 0

rhcpfan
rhcpfan

Reputation: 567

You are getting those errors because the linker doesn't know in which library to look for the used methods. You can try adding the names of those libraries (depending on the methods you are using, try adding opencv_core248.lib, etc.) in Project properties->Linker->Input->Additional dependencies.

The second method is by adding the additional dependencies before the main function via pragma comments, as follows:

#pragma comment (lib, "opencv_core248d.lib")
#pragma comment (lib, "opencv_highgui248d.lib")
#pragma comment (lib, "opencv_imgproc248d.lib")
#pragma comment (lib, "opencv_video248d.lib")
#pragma comment (lib, "opencv_features2d248d.lib")

If you are building a release version, remove the "d" letter before the extension (opencv_core248.lib, etc.)

Let me know if that works for you!

Best regards

Upvotes: 5

Related Questions