【问题标题】:error: undefined reference to `cv::imread(std::string const&, int)'错误:未定义对 `cv::imread(std::string const&, int)' 的引用
【发布时间】:2014-10-18 01:06:24
【问题描述】:

我是 Qt 新手,我有一个需要在 Qt 中配置 OpenCV 的项目,我尝试在 Qt 中运行一个简单的代码,但我收到此错误“未定义对 cv::imread(std::string const&, int) 的引用” 这是我的代码...

#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"

using namespace cv;

int main(){
Mat src,gray;
src=imread("C:/Users/user/Desktop/wood-pattern.png",1);
imshow("gg",src);
cvWaitKey(0);
return 0;
}

我的 source.pro 是

#-------------------------------------------------
#
# Project created by QtCreator 2014-08-24T20:38:56
#
#-------------------------------------------------
INCLUDEPATH += C:\opencv\opencv2.4.9\build\include\
CONFIG(release,debug|release)
{
LIBS += C:\opencv\opencv2.4.9\build\x86\vc11\lib\opencv_calib3d249.lib \
        C:\opencv\opencv2.4.9\build\x86\vc11\lib\opencv_contrib249.lib \
        C:\opencv\opencv2.4.9\build\x86\vc11\lib\opencv_core249.lib \
        C:\opencv\opencv2.4.9\build\x86\vc11\lib\opencv_features2d249.lib \
        C:\opencv\opencv2.4.9\build\x86\vc11\lib\opencv_flann249.lib \
        C:\opencv\opencv2.4.9\build\x86\vc11\lib\opencv_gpu249.lib \
        C:\opencv\opencv2.4.9\build\x86\vc11\lib\opencv_highgui249.lib \
        C:\opencv\opencv2.4.9\build\x86\vc11\lib\opencv_imgproc249.lib \
        C:\opencv\opencv2.4.9\build\x86\vc11\lib\opencv_legacy249.lib \
        C:\opencv\opencv2.4.9\build\x86\vc11\lib\opencv_ml249.lib \
        C:\opencv\opencv2.4.9\build\x86\vc11\lib\opencv_objdetect249.lib \
        C:\opencv\opencv2.4.9\build\x86\vc11\lib\opencv_ts249.lib \
        C:\opencv\opencv2.4.9\build\x86\vc11\lib\opencv_video249.lib
        }
CONFIG(debug,debug|release)
       {
LIBS += C:\opencv\opencv2.4.9\build\x64\vc11\lib\opencv_calib3d249.lib \
        C:\opencv\opencv2.4.9\build\x64\vc11\lib\opencv_contrib249.lib \
        C:\opencv\opencv2.4.9\build\x64\vc11\lib\opencv_core249.lib \
        C:\opencv\opencv2.4.9\build\x64\vc11\lib\opencv_features2d249.lib \
        C:\opencv\opencv2.4.9\build\x64\vc11\lib\opencv_flann249.lib \
        C:\opencv\opencv2.4.9\build\x64\vc11\lib\opencv_gpu249.lib \
        C:\opencv\opencv2.4.9\build\x64\vc11\lib\opencv_highgui249.lib \
        C:\opencv\opencv2.4.9\build\x64\vc11\lib\opencv_imgproc249.lib \
        C:\opencv\opencv2.4.9\build\x64\vc11\lib\opencv_legacy249.lib \
        C:\opencv\opencv2.4.9\build\x64\vc11\lib\opencv_ml249.lib \
        C:\opencv\opencv2.4.9\build\x64\vc11\lib\opencv_objdetect249.lib \
        C:\opencv\opencv2.4.9\build\x64\vc11\lib\opencv_ts249.lib \
        C:\opencv\opencv2.4.9\build\x64\vc11\lib\opencv_video249.lib \
}
QT       += core

QT       -= gui

TARGET = Source
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app


SOURCES += main.cpp

我看到了所有的答案,但它们没有用。 我的 Qt 是 32 位,我的 Windows 是 64 位。 我认为我的配置是错误的。我学习了很多教程,但它们不适用于 OpenCV 2.4.9,所以请帮助我...

【问题讨论】:

    标签: c++ qt opencv imread


    【解决方案1】:

    我不使用 Qt-creator,而是使用 Vim。所以我创建了自己的运行良好的命令。 这是我的 cv2run 自定义命令内容:

     #!/bin/bash 
    
    file=$@
    
    if [ "${file: -4}" = ".cpp"  ]; then 
            g++ $file -I/opt/robots/pepper/ctc-linux64-atom-2.5.10.7/opencv2/include/ -L/opt/robots/pepper/ctc-linux64-atom-2.5.10.7/opencv2/lib -lopencv_core -lopencv_highgui -lopencv_imgcodecs -lopencv_imgproc -lopencv_videoio 
        if $status ; then 
            ./a.out && rm -rf a.out
        fi
    else
        echo "This Command should be used only with cpp files that uses the opencv library !!"
    fi 
    

    【讨论】:

      【解决方案2】:

      就我而言,这只是参数的顺序,请注意

      g++ main.cpp -o main `pkg-config --libs --cflags opencv`
      

      工作时

      g++ -o main `pkg-config --libs --cflags opencv` main.cpp
      

      没有,因为后者定义了 main.cpp 需要之前 main.cpp 被引用。

      【讨论】:

        【解决方案3】:

        不知道Windows,但如果它有pkg-config,你应该可以通过添加让QMake自动使用它

        PKGCONFIG += opencv
        

        到您的项目文件(假设您的 OpenCV 安装了正确的包配置文件,就像在正常平台上一样)。

        【讨论】:

          【解决方案4】:

          查看pkg-config opencv --libs 的输出以找出您缺少哪些库,然后将它们添加到您的配置中。

          对我来说,完整的库列表是

          /usr/lib64/libopencv_calib3d.so.2.4.8
          /usr/lib64/libopencv_contrib.so.2.4.8
          /usr/lib64/libopencv_core.so.2.4.8
          /usr/lib64/libopencv_features2d.so.2.4.8
          /usr/lib64/libopencv_flann.so.2.4.8
          /usr/lib64/libopencv_gpu.so.2.4.8
          /usr/lib64/libopencv_highgui.so.2.4.8
          /usr/lib64/libopencv_imgproc.so.2.4.8
          /usr/lib64/libopencv_legacy.so.2.4.8
          /usr/lib64/libopencv_ml.so.2.4.8
          /usr/lib64/libopencv_nonfree.so.2.4.8    # you don't have this one
          /usr/lib64/libopencv_objdetect.so.2.4.8
          /usr/lib64/libopencv_photo.so.2.4.8      # this one
          /usr/lib64/libopencv_stitching.so.2.4.8  # this one
          /usr/lib64/libopencv_superres.so.2.4.8   # and this one
          /usr/lib64/libopencv_ts.a
          /usr/lib64/libopencv_video.so.2.4.8
          

          【讨论】:

          • 实际上我的代码只需要 highgui 和 imgpro 库。我的 windows 是 64 位而 qt 是 32 位重要吗?我应该在 source.pro 中具体写什么?我应该添加 dll.a 库吗?
          • 就你在 32 中编译而言,你的库也必须是 32 位
          猜你喜欢
          • 2020-09-17
          • 2015-10-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-25
          • 2021-01-23
          相关资源
          最近更新 更多