OpenCV 3似乎不适用于Qt

时间:2015-09-25 16:06:47

标签: c++ qt opencv windows-8.1

我按照this tutorial安装OpenCV以使用Qt。 几年前我和Qt一起使用OpenCV,我不得不自己构建OpenCV和Qt。我现在很高兴通过仅构建OpenCV来解决问题。

像往常一样,CMake有很多错误。我不得不禁用一些额外的东西,比如opencv_apps和examples,但是它正确构建了库。 动态库不起作用,但我打算静态地使用它。

在Qt中链接OpenCV库之后,不要忘记图像的打开已经移动到“imgcodecs”

LIBS += -lopencv_core300 -lopencv_highgui300 -lopencv_imgproc300
LIBS += -lopencv_imgcodecs300

我尝试了一个简单的程序:

#include <opencv.hpp>

// ...

cv::Mat image = cv::imread("testimage.png");
cv::namedWindow("Test image");
cv::imshow("Test image", image);
cv::waitKey(1000);

它不起作用。

  

matrix.cpp:-1:错误:未定义引用`ippicviSum_8u_C1R @ 20'

在Google上搜索“ippicviSum”绝不会返回任何内容(好吧,直到这个问题被他们抓取)。

我知道这些库至少有些工作,或至少找到,因为如果我从项目文件中删除lopencv_imgcodecs300,我会收到一个额外的错误,这不是在那里包括图书馆:

  

错误:未定义引用`cv :: imread(cv :: String const&amp;,int)'

我放弃了C ++ API,并试图使用经典的C API。 (在我2年前的试用版中,C ++ API也遇到了一些问题 - 基本的开放和显示都有效,但是更复杂的算法会给链接器带来错误,所以我采用了C API,它运行正常)

#include <cv.h>
#include <cvaux.h>
#include <cvwimage.h>
#include <cxcore.h>
#include <highgui.h>

// ...

IplImage *image = cvLoadImage("testimage.png");

结果:

  

loadsave.cpp:-1:错误:未定义引用   `CV ::字符串:: DEALLOCATE()'

2 个答案:

答案 0 :(得分:2)

'ippicviSum_8u_C1R'是intel性能原语(ipp)库,现在免费提供opencv。看起来您缺少下载,我通常从源代码构建opencv,但如果您有安装程序,则可能需要单独获取英特尔库。

不需要使用cv :: String类型,只需使用常规的std :: string。 cv类型用于支持旧的嵌入式平台和过时的c ++编译器。有些Qt宏可能正在重新定义“String”并破坏代码吗?

编辑:问题可能还在于您使用的是旧版C api。 而是做:

cv::Mat image = cv::imread("testimage.png");

或者如果您仍有问题,

cv::Mat image = cv::imread(std::string("testimage.png"));

答案 1 :(得分:0)

问题似乎是OpenCV 3.0与Qt 5.4附带的mingw版本(491)不兼容。

升级到使用mingw 492的Qt 5.5解决了这个问题。