проблема opencv с 2013 C ++

0

Я использую opencv 2.4.8 с visual studio 2013. Я пытаюсь запустить свое приложение. Я точно знаю, что код работает, но у меня возникают проблемы с компоновщиками, которые я считаю...

вот ошибка, которую я получаю:

    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

У меня было приложение 2012 года по сравнению с этим проектом, и он работал отлично. Шаги, которые я выполнил, это установка дополнительных библиотечных каталогов как "C:\opencv\build\x86\vc12\lib" и дополнительных каталогов Include как "C:\OpenCV\сборка\включают в себя". Для безопасных мер я также устанавливаю путь как C:\opencv. Я не знаю, что я забываю? Я заранее благодарю вас за помощь!

вот код:

    #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;
    }
  • 0
    Вы собирали opencv с Visual Studio 2013?
  • 0
    Я использовал vs 2013 для своего приложения, но я никогда не собирал opencv раньше.
Теги:
opencv

2 ответа

5
Лучший ответ

Вы получаете эти ошибки, потому что компоновщик не знает, в какой библиотеке искать используемые методы. Вы можете попробовать добавить имена этих библиотек (в зависимости от методов, которые вы используете, попробуйте добавить opencv_core248.lib и т.д.) В Project properties-> Linker → Input-> Дополнительные зависимости.

Второй способ заключается в добавлении дополнительных зависимостей перед основной функцией через комментарии прагмы следующим образом:

#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")

Если вы создаете версию выпуска, удалите букву "d" перед расширением (opencv_core248.lib и т.д.),

Дайте мне знать, если это сработает для вас!

С наилучшими пожеланиями

  • 0
    хорошо, я попробую это!
0

Проверьте, установлена ли ваша платформа win32 или x64 (решение Properties--> Конфигурация → столбец платформы). Я столкнулся с аналогичной проблемой, когда моя платформа была win32, и компоновщик пытался связать с помощью x64.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню