Только начал использовать OpenCV и Qt. Когда я использовал Qt 6, в соответствии с процедурами из книги вводился соответствующий код, но на этапе компиляции сообщалось об ошибке. Изначально я думал, что библиотека OpenCV скомпилирована плохо, но при использовании VS 2022 проблем нет. Ниже приведены некоторые фрагменты кода:
// vscode
using namespace cv;
Mat image = imread("C:\\Users\\Documents\\Screenshot 2023-07-30 205234.png");
imshow("Output", image);
следуйте Qt Creator:
#.pri
INCLUDEPATH += D:/data/opencv-4.10.0/opencv-4.10.0/_build/install/include
Debug:{
LIBS += D:/data/opencv-4.10.0/opencv-4.10.0/_build/install/x64/vc17/lib/opencv_world4100d.lib
}
Release:{
LIBS += D:/data/opencv-4.10.0/opencv-4.10.0/_build/install/x64/vc17/lib/opencv_world4100.lib
}
// qform
#include "mainwindow.h"
#include <QApplication>
#include "opencv2/opencv.hpp"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
cv::Mat image = cv::imread("C:/Users/邵长虹/Documents/Screenshot 2023-07-30 205234.png");
cv::imshow("Output", image);
MainWindow w;
w.show();
return a.exec();
}
Информация об ошибке:
debug/main.o: in function qMain(int, char ** )':
undefined reference to `cv::imread(std::__cxx11::basic_string <char, std::char_traits<char>, std::allocator<char> > const&, int)'
D:\QTProject\MyFirstQtProject\build\Desktop_Qt_6_72_MinGW_64_bit-Debug/../../main.cpp:11: undefined reference to `cv::imshow(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, cv::_InputArray const&)'
D:\QTProject\MyFirstQtProject\build\Desktop_Qt_6_7_2_MinGW_64_bit-Debug/../../main.cpp:15: undefined reference to 'cv::Mat::~Mat0'
D:\QTProject\MyFirstQtProject\build\Desktop_Qt_6_7_2_MinGW_64_bit-Debug/../../main.cpp:15: undefined reference to 'cv::Mat::~Mat0'
collect2.exe: error: Id returned 1 exit status
Included header opencv.hpp is not used directly (fix available)
Это пример кода в моем справочном листе:
INCLUDEPATH += c:/dev/opencv/build/install/include
Debug: {
LIBS += -lc:/dev/opencv/build/install/x86/vc14/lib/opencv_world330d
}
Release: {
LIBS += -lc:/dev/opencv/build/install/x86/vc14/lib/opencv_world330
}
Я использую компилятор MinGW. Что я могу сделать, чтобы это исправить?
Я думаю, что Qt Creator может использовать MSVC. Я бы порекомендовал это вместо попытки сборки OpenCV MinGW.
Очень много думаю. Изначально я думал, что для перекомпиляции opencv используется MinGW, но позже я обнаружил, что это слишком сложно и на решение различных зависимостей уходит целый день, поэтому я сдался и переключился на msvc для компиляции qt
Как сказали несколько крупных парней выше, файлы библиотеки, созданные разными сборщиками, не являются универсальными, и при их действительном использовании относительно просто скомпилировать OpenCV с использованием vs + cmake в среде Windows, но в настоящее время QT6 по умолчанию использует MinGW. , Самое простое решение — заменить MinGW на MSVC 19 в пакете управления QT, чтобы эту проблему можно было легко решить. Следует отметить, что как новичок старайтесь не использовать MinGW для перекомпиляции OpenCV.
перекомпилируйте opencv с помощью mingw. Вы используете версию, скомпилированную с помощью vc17. Кроме того,
imread
не будет работать с символами, отличными от ascii, в пути к файлу. Смотрите это