推荐使用编译好的opencv包,直接使用。本人使用opencv4.8.0——opencv4.1.0之间各个版本尝试编译,只有一次编译成功了,中间会出各种问题,简直折磨死人。建议不要安装到D:\Program Files (x86)和D:\Program Files这种文件路径内,在powershell界面不好操作,而且使用cd命令切换路径输入(x86)会无法识别,不好操作。
一. 不用编译配置
各种OpenCV对应的MinGW编译器编译的库下载地址:
github上有各个版本MinGW编译好的opencv库,下载地址为:https://github.com/huihut/OpenCV-MinGW-Build
下载完成后,将解压好的文件夹中的include文件夹地址添加到Qt 的pro文件中;同时将x86/mingw/lib和x86/mingw/bin 文件夹中的文件路径也添加到Qt 的pro文件中,如下图:
INCLUDEPATH += D:\Software\OpenCV-MinGW-Build-OpenCV-4.1.0\OpenCV-MinGW-Build-OpenCV-4.1.0\include
LIBS += D:\Software\OpenCV-MinGW-Build-OpenCV-4.1.0\OpenCV-MinGW-Build-OpenCV-4.1.0\x86\mingw\lib\libopencv_*.a \
D:\Software\OpenCV-MinGW-Build-OpenCV-4.1.0\OpenCV-MinGW-Build-OpenCV-4.1.0\x86\mingw\bin\libopencv_*.dll
注意:x86/mingw/bin 文件夹的路径必须添加到系统环境变量中,添加到环境变量之中可能要重启电脑,也可能不用重启;但是必须重启Qt。然后在Qt 随便建立个工程进行测试
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
cv::Mat img = imread("E:\\QtFiles\\ImageCOM\\rc.jpeg");
namedWindow( "Display window", WINDOW_AUTOSIZE );
imshow( "Display window", img );
Widget w;
w.show();
return a.exec();
}
运行后可以看到opencv读取了路径之中的图片并成功显示:
二. 自己编译opencv配置
我的编译环境
CMake:3.26.4
opencv: 4.6.0 或 4.8.0
Qt: 5.12.9
我是参考这位大佬的,大家自行查看吧,写的挺详细的,在此多谢这位大佬了:Qt配置OpenCV教程,亲测已试过(详细版)_Wi~的博客-CSDN博客
我主要讲解一下我在配置过程中遇到的问题,博主不想写代码的公举已经整理了大多数问题,非常具有参考价值,在此谢谢这位美丽善良可爱的公举了,Qt配置OpenCV教程及错误解决方法_qt配置opencv出错_不想写代码的公举的博客-CSDN博客
特别说明:1. 在CMake中点击configure 如果下面窗口出现红色警告等提示说明配置是有问题的,编译肯定无法通过的;2. 建议在CMake configure 过程中挂梯子,要不然会出现“could not resolve host name”的错误提示,详细解决方案见不想写代码的公举中的介绍。3. 配置无误之后在Generate生成的文件中打开powershell 输入mingw32-make -j 8进行编译
本人在编译过程中出现如下问题:
Linking C static library ..\lib\liblibwebp.a
[ 15%] Built target libwebp
mingw32-make: *** [Makefile:165: all] Error 2
在CMake 中取消勾选WITH_WEBP 重新configure,generate并编译即可
接着又出现如下问题
[ 25%] Linking CXX shared library ..\..\bin\libopencv_core480.dll
D:/Qt/Qt5.12.9/Tools/mingw730_64/bin/../lib/gcc/x86_64-w64-mingw32/7.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: i386 architecture of input file `CMakeFiles\opencv_core.dir/objects.a(vs_version.rc.obj)' is incompatible with i386:x86-64 output
collect2.exe: error: ld returned 1 exit status
mingw32-make[2]: *** [modules\core\CMakeFiles\opencv_core.dir\build.make:1936: bin/libopencv_core480.dll] Error 1
mingw32-make[1]: *** [CMakeFiles\Makefile2:1834: modules/core/CMakeFiles/opencv_core.dir/all] Error 2
mingw32-make: *** [Makefile:165: all] Error 2
添加条目OPENCV_VS_VERSIONINFO_SKIP = 1,重新Configure,Generate编译
接下来编译会遇到各种各样错误,如下所示等等,选择反复编译,不用管这些错误,同时在D:\Software\opencv_4.8.0\opencv\opencv_build\lib\文件夹中可以看到生成的各种文件
[ 34%] Linking CXX shared library ..\..\bin\libopencv_imgproc480.dll
[ 35%] Built target opencv_imgproc
mingw32-make: *** [Makefile:165: all] Error 2
[ 40%] Linking CXX shared library ..\..\bin\libopencv_imgcodecs480.dll
[ 40%] Built target opencv_photo
[ 40%] Linking CXX shared library ..\..\bin\libopencv_features2d480.dll
[ 40%] Built target opencv_imgcodecs
[ 40%] Built target opencv_features2d
mingw32-make: *** [Makefile:165: all] Error 2
在进行反复编译后,直到多次遇见相同的错误 libprotobuf 时
mingw32-make[2]: *** [3rdparty\protobuf\CMakeFiles\libprotobuf.dir\build.make:676: 3rdparty/protobuf/CMakeFiles/libprotobuf.dir/src/google/protobuf/wire_format.cc.obj] Error 1
mingw32-make[2]: *** [3rdparty\protobuf\CMakeFiles\libprotobuf.dir\build.make:481: 3rdparty/protobuf/CMakeFiles/libprotobuf.dir/src/google/protobuf/descriptor.cc.obj] Error 1
mingw32-make[1]: *** [CMakeFiles\Makefile2:1756: 3rdparty/protobuf/CMakeFiles/libprotobuf.dir/all] Error 2
mingw32-make: *** [Makefile:165: all] Error 2
网上多数人说 取消勾选 ENABLE_CXX,但是我没有找到这个选项;但是取消勾选WITH_PROTOBUF,并重新configure,generate,编译。不出意外会一次性编译成功。
[100%] Linking CXX executable ..\..\bin\opencv_test_gapi.exe
[100%] Built target opencv_test_gapi
接着执行 mingw32-make install 命令,在D:\Software\opencv_4.6.0\opencv\opencv_build\文件夹下可以看到生成了install 文件夹,这个install文件夹才是我们最终想要的东西,将其路径添加到Qt pro文件中
INCLUDEPATH += D:\Software\opencv_4.6.0\opencv\opencv_build\install\include
LIBS += D:\Software\opencv_4.6.0\opencv\opencv_build\install\x64\mingw\lib\libopencv_*.a \
D:\Software\opencv_4.6.0\opencv\opencv_build\install\x64\mingw\bin\libopencv_*.dll
添加测试代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
cv::Mat image=cv::imread("E:\\QtFiles\\cv_test\\61321.png");//一定要使用绝对路径,其他可以回报错
namedWindow( "Display window", WINDOW_AUTOSIZE );
cv::imshow( "Display window", image );
}
可以看到成功显示图片
本人利用此种编译过程成功编译好了opencv4.6.0和opencv4.8.0版本,亲测有效。文章来源:https://www.toymoban.com/news/detail-715774.html
本人新手小白,很多配置步骤都不知道是干啥的,第一次写博客,欢迎大家评论区交流学习。文章来源地址https://www.toymoban.com/news/detail-715774.html
到了这里,关于Qt 搭建OPENCV环境,含无需编译和自行编译的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!