OpenCV 3似乎不适用于Qt

OpenCV 3 doesn't seem to work with Qt

本文关键字:适用于 Qt 不适用 OpenCV      更新时间:2023-10-16

我遵循本教程安装OpenCV与Qt一起工作。几年前,我在Qt上使用过OpenCV,我不得不自己构建OpenCV和Qt。我现在很高兴,只有构建OpenCV的解决方案存在。

像往常一样,

CMake有很多错误。我不得不禁用一堆额外的,像opencv_apps和例子,但它正确地构建了库。动态库不能工作,但我还是打算静态地使用它。

在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'的未定义引用

在谷歌上搜索"ippicviSum"绝对没有返回任何结果(好吧,直到这个问题将被他们抓取)。

我知道库至少在某种程度上工作,或者至少找到,因为如果我从项目文件中删除lopencv_imgcodecs300,我会得到一个额外的错误,当包含库时不存在:

错误:对' cv::imread(cv::String const&, int)'的未定义引用


我放弃了c++ API,并尝试使用经典的C API。(在我两年前的试验中,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:错误:未定义引用"简历::字符串::释放()

'ippicviSum_8u_C1R'是英特尔性能原语(ipp)库,现在opencv免费提供。看起来你错过了下载,我通常从源代码构建openv,但如果你有一个安装程序,你可能需要单独获得英特尔库。

不需要使用cv::String类型,只需使用常规std:: String。cv类型的存在是为了支持带有过时c++编译器的旧嵌入式平台。有可能一些Qt宏正在重新定义"字符串"和打破代码?

edit:问题也可能是您正在使用遗留的C api。而不是做:

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

或者如果你仍然有问题,

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

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

升级到Qt 5.5,使用mingw492,解决了这个问题。

相关文章: