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'的未定义引用
在谷歌上搜索"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,解决了这个问题。
- FLTK 2.0构建和演示,适用于VS2019的2011年左右的代码库
- C++17 - 使用自定义分配器的节点提取/重新插入 - 适用于 clang++/libc++,但不适用于 libstd
- "string.h"在构建适用于iOS的qt应用程序中找不到消息
- 适用于 WebView2 旧版本的示例应用程序
- 在 NVIDIA GEFORCE GTX 1050 上下载适用于 Windows 10 的 openCL 1.2
- __attribute__(优化(0))) 是否适用于"recursively"?
- 为什么 std::erase(std::erase_if) 不是适用于<algorithm>任何容器的模板?
- 使用一个参数的模板函数时出错(适用于 2)
- 使用 适用于 Android 和 iOS 的 tf-lite C++ API
- 为什么这适用于 G++ 而不是 CLANG?
- 适用于 macOS 的 Xcode 应用程序。这就是我设置从USB麦克风输入获取音频的方式。一年前工作,现在没有了。为什么
- 适用于 macOS 的 Qt 5.9.1 的系统托盘应用程序
- Qt C++macOS问题。我正在使用函数 .find( "a word") 在多集中搜索单词,它适用于 Windows 但不适用于 mac
- 适用于 iOS 和 Android 的 QT C++ 中的 HTTPS 请求
- 嵌入的双引号适用于QT 4.7.4,而不适用于4.8.6
- 无法使用适用于Android的Qt使手机播放声音或振动
- 在 Linux 上使用 GCC 交叉编译适用于 Windows 的 Qt 应用程序
- 我们是否可以使用 Qt(64) 来生成一个同时适用于 32 位窗口和 64 位窗口的应用程序
- 是否有一些WebKit替代品适用于Android上的Qt
- 适用于Android的Qt找不到任何兼容的设备答案找到但不知道如何