繁体   English   中英

OpenCV 3似乎不适用于Qt

[英]OpenCV 3 doesn't seem to work with Qt

我按照本教程进行操作,以安装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'的引用

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

我知道这些库至少可以正常工作,或者至少可以找到 ,因为如果我从项目文件中删除lopencv_imgcodecs300 ,我会得到一个附加错误,当包含该库时,该错误不存在:

错误:未定义引用`cv :: imread(cv :: String const&,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 :: String :: deallocate()'的未定义引用

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

无需使用cv :: String类型,只需使用常规的std :: string。 那里的cv类型可以使用过时的c ++编译器来支持旧的嵌入式平台。 是否有可能某些Qt宏正在重新定义“字符串”并破坏代码?

编辑:问题可能还在于您正在使用旧版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)不兼容。

升级到使用mingw 492的Qt 5.5可以解决此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM