QT开发中经常遇到使用OpenCV,记录一下OpenCV库的编译调用过程。
承接各类STM32项目、JAVA、C++、Android、微信、Linux,毕业设计开发
手机:18559979152(微信同号)
环境:Window10 64位
下载地址:https://opencv.org/releases/ opencv-4.3.0-vc14_vc15.exe
安装OpenCV很简单,其实就是一个解压动作,解压到非中文目录下,我的目录是C:\OpenCV3.4.7
qt-opensource-windows-x86-mingw492-5.5.0.exe
下载地址:http://download.qt.io/archive/qt/
我下载的是5.5带MinGW版本,安装没什么好讲的,直接下一步,下一步,完成
cmake-3.18.0-rc2-win64-x64.msi
下载地址:https://cmake.org/download/
安装时注意选择添加到系统变量,其它默认一路下一步,直到完成
C:\Program Files\CMake\bin CMake环境变量
C:\Qt\Qt5.5.0\Tools\mingw492_32\bin MinGW环境变量
打开刚才安装的CMake
设置OpenCV源码路径
设置OpenCV编译输出路径(自建目录)
然后点击下面的Configure按钮,弹出窗口中的<指定该项目的生成器>选择MinGW Makefiles,下面单选框选择Specify native compilers,单击下一步;
弹出窗口,选择C和C++编译器的目录,在QT5.5目录中tools目录里的MinGW工具里,单Finish完成
红色行为有错误,按下面的信息修改就行了,第一次点配置按钮,要很长时间,更改后重新单击配置按钮,直到没有错误
选中“WITH_OPENGL”、“WITH_QT”,将“WITH_IPP”取消。然后再次点【Configure】
Qt5_DIR 值为:C:/Qt/Qt5.5.0/5.5/mingw492_32/lib/cmake/Qt5
QT_QMAKE_EXECUTABLE 值为:C:/Qt/Qt5.5.0/5.5/mingw53_32/bin/qmake.exe
Qt5Concurrent_DIR 值为:C:/Qt/Qt5.5.0/5.5/mingw53_32/lib/cmake/Qt5Concurrent
Qt5Core_DIR 值为:C:/Qt/Qt5.5.0/5.5/mingw53_32/lib/cmake/Qt5Core
Qt5Gui_DIR 值为:C:/Qt/Qt5.5.0/5.5/mingw53_32/lib/cmake/Qt5Gui
Qt5Test_DIR 值为:C:/Qt/Qt5.5.0/5.5/mingw53_32/lib/cmake/Qt5Test
Qt5Widgets_DIR 值为:C:/Qt/Qt5.5.0/5.5/mingw53_32/lib/cmake/Qt5Widgets
Qt5OpenGL_DIR 值为:C:/Qt/Qt5.5.0/5.5/mingw53_32/lib/cmake/Qt5OpenGL
当信息显示Configuring done且没有错误时,单击generate按钮,生成完毕后,先不要关闭CMake如果后面编译有错误,还要更改配置。
使用管理员模式打开CMD
cd 到刚才CMake生成的源码目录(就是之前自己新建的文件夹),准备编译
输入“mingw32-make”命令,如果提示找不到命令啥的,看看文章前面的MinGW系统变量是不是没有设置,目录为C:\Qt\Qt5.5.0\Tools\mingw492_32\bin,根据你的QT安装位置设置环境变量
按回车进行编译
哦霍
一片绿油油后出现error
错误1
[ 40%] Building RC object modules/core/CMakeFiles/opencv_core.dir/vs_version.rc.obj
gcc: error: long: No such file or directory
解决方法:在cmake里面找到OPENCV_ENABLE_ALLOCATOR_STATS或者在search里面搜索,然后把后面的勾选去掉,接着Configure和Generate后,接着在cmd窗口中mingw32-make即可继续编译。
错误2
C:\OpenCV3.4.7\modules\videoio\src\cap_dshow.cpp:2298:41: error: 'sprintf_instead_use_StringCbPrintfA_or_StringCchPrintf
A' was not declared in this scope
C:\OpenCV3.4.7\modules\videoio\src\cap_dshow.cpp中添加
#define STRSAFE_NO_DEPRECATE
错误3
chmod’ 不是内部或外部命令,也不是可运行的程序 或批处理文件
if(NOT CMAKE_HOST_WIN32) # chmod may be not available on Win32/MinGW (and it is not required)
set(_pch_prepare_command COMMAND chmod +x "${_pch_generate_file_cmd}")
endif()
ADD_CUSTOM_COMMAND(
OUTPUT "${_output}"
COMMAND ${CMAKE_COMMAND} -E make_directory "${_outdir}"
COMMAND chmod +x "${_pch_generate_file_cmd}"
${_pch_prepare_command}
错误4
报错文件test_hdr.cpp
在头部引用一下
#include
错误5
错误行:C:/OpenCV3.4.7Build/modules/dnn/test_precomp.hpp:50:27: fatal error: test_common.hpp: No such file or directory
#include "test_common.hpp"
把C:\OpenCV3.4.7\modules\dnn\test\test_common.hpp复制到C:\OpenCV3.4.7Build\modules\dnn\
经过个把小时绿油油输出后,编译完成。
编译成功后,再输入mingw32-make install,回车运行
安装完成
将编译生成目录中的bin目录添加到系统变量
C:\OpenCV3.4.7Build\bin
打开QT新建一个工程
在xxx.pro中添加
INCLUDEPATH+="C:\OpenCV3.4.7Build\install\include"
INCLUDEPATH+="C:\OpenCV3.4.7Build\install\include\opencv"
INCLUDEPATH+="C:\OpenCV3.4.7Build\install\include\opencv2"
LIBS += C:\OpenCV3.4.7Build\lib\libopencv_*.a
在main.cpp中添加
#include
#include
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
//声明IplImage指针
IplImage *pImg;
//载入图片
pImg = cvLoadImage("D:\\0200626235750.jpg", 1);
//创建窗口
cvNamedWindow("Image",1);
//显示图像
cvShowImage("Image",pImg);
//等待按键
cvWaitKey(0);
//销毁窗口
cvDestroyWindow("Image");
//释放图像
cvReleaseImage(&pImg);
}
运行程序,如果显示如下图,则调用成功