我按照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()'
答案 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解决了这个问题。