c++ - vs 2013 C++ 的 opencv 问题

标签 c++ opencv

我在 visual studio 2013 中使用 opencv 2.4.8。我一直在尝试让我的应用程序运行。我确信代码有效,但我相信我遇到了链接器问题......

这是我得到的错误:

    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 vs 应用程序,它工作得很好,我所做的步骤是将附加库目录设置为“C:\opencv\build\x86\vc12\lib”并将附加包含目录设置为“C:\opencv\build\include”。为了安全起见,我还将路径设置为 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;
    }

最佳答案

您收到这些错误是因为链接器不知道在哪个库中查找使用的方法。你可以尝试在Project properties->Linker->Input->Additional dependencies中添加那些库的名称(根据你使用的方法,尝试添加opencv_core248.lib等)。

第二种方法是通过pragma comments在main函数之前添加额外的依赖,如下:

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

让我知道这是否适合您!

最好的问候

关于c++ - vs 2013 C++ 的 opencv 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21566508/

相关文章:

opencv - 如何创建具有单独 rgb channel 数据的 opencv 矩阵

c++ - Boost.Python 找不到 pyconfig.h。它需要去哪里?

c++ - 如果类包含基类类型的成员作为第一个元素,然后是其他成员,编译器能否优化空基类?

c++ - 将 std::endl 转换为函数指针

python - 使用OpenCV Python查找等效的imagemagick morphology命令

opencv - 使用端点和凸出距离绘制圆弧。在 OpenCV 或 PIL 中

c++ - 为什么我不能 memmove std::string?

C++ pow 函数得到一个奇怪的结果

android - 无法导入 org.opencv.features2d.DMatch;在安卓工作室

python - py3 中的 OpenCV Python : how to avoid cv2. imwrite() 内存 "leak"?