簡體   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