opencv官网的opencv编译好的库都是用VC编译的,但是MinGW并不能链接,因此需要用mingw重新编译
1、下载工具:
我们并不需要下载mingw,用Qt自带的mingw就可以了
下载安装Qt最新版本:https://www.qt.io/download-open-source/#section-2
下载安装Cmake最新版本:https://cmake.org/download/
下载安装opencv3.1:http://opencv.org/downloads.html
将Qt自带的Mingw路径加入环境变量
2、双击打开cmake-gui,指定opencv的source目录,新建release文件夹作为编译输出目录。
3、单击Configure,选择MinGw Makefiles作为发生器,选择指定本地的编译器,分别选择
“C:\Qt\Qt5.6.0\Tools\mingw492_32\bin\gcc.exe“作为C编译器和
”C:\Qt\Qt5.6.0\Tools\mingw492_32\bin\g++.exe"作为“C++编译器,
然后点击Finish完成配置。软件开始自动配置。
4、红色的CMake编译结果出现时,勾选生成列表中的WITH_QT项。
5、再次点击Configure,红色消失:
6、单击”Generate“,产生Makefile文件,成功后,下面会提示Generating done
7、进入”D:\opencv\release“目录,输入mingw32-make开始编译,此过程较为漫长,需要关闭杀毒软件:
8、编译完成后输入mingw32-make install,安装完成。
9、添加环境变量:
10、新建Qt工程,在.pro中文件中添加:
INCLUDEPATH += D:\opencv\release\install\include
LIBS += -LD:\opencv\release\install\x86\mingw\bin\
libopencv_core310 \
libopencv_highgui310 \
libopencv_imgproc310 \
libopencv_features2d310 \
libopencv_calib3d310 \
libopencv_imgcodecs310
如果没有添加libopencv_imgcodecs310,可能出现undefined reference to imread错误,这是因为opencv3的模块作了改变
测试代码:
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Mat img = imread("D:/opencv/me.jpg");
imshow("Picture",img);
waitKey(3000);
return a.exec();
}
11、运行程序,如果显示了一个图片说明,opencv环境搭建成功
12、安装opencv遇到的问题:
问题1:
CMake Error: CMake was unable to find a build program corresponding to "MinGW Makefiles". CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool.
解决方案如下:
勾选Grouped和Advanced选项,出现CMAKE_MAKE_PROGRAM选项,然后将CMAKE_MAKE_PROGRAM项后面的路径设置为Qt安装路径下的路径如下所示:MinGW/bin/mingw32-make.exe,重新点击Configure,问题解决!
问题2:
点击Add Entry,设置CMAKE_PREFIX_PATH:E:\Qt\Qt5.13.0\5.13.0\mingw73_32,目录指向必须是在包含有bin lib include等这些QT的安装目录。
问题3:
编译错误如下:
[ 39%] Building CXX object modules/core/CMakeFiles/opencv_core.dir/mean.avx2.cpp.obj
[ 39%] Building CXX object modules/core/CMakeFiles/opencv_core.dir/merge.avx2.cpp.obj
[ 40%] Building CXX object modules/core/CMakeFiles/opencv_core.dir/split.avx2.cpp.obj
[ 40%] Building CXX object modules/core/CMakeFiles/opencv_core.dir/sum.avx2.cpp.obj
[ 40%] Building RC object modules/core/CMakeFiles/opencv_core.dir/vs_version.rc.obj
gcc: error: long: No such file or directory
C:\PROGRA~1\MINGW-~1\X86_64~1.0-P\mingw64\bin\windres.exe: preprocessing failed.
mingw32-make[2]: *** [modules\core\CMakeFiles\opencv_core.dir\build.make:1492: modules/core/CMakeFiles/opencv_core.dir/vs_version.rc.obj] Error 1
mingw32-make[2]: *** Waiting for unfinished jobs....
mingw32-make[1]: *** [CMakeFiles\Makefile2:1844: modules/core/CMakeFiles/opencv_core.dir/all] Error 2
mingw32-make: *** [Makefile:179: all] Error 2
原因:the windres.exe mingw uses cannot handle/escape “long long” given as a cmdline arg
解决方法:在cmake里面找到OPENCV_ENABLE_ALLOCATOR_STATS或者在search里面搜索,然后把后面的勾选去掉,接着Configure和Generate后,接着在cmd窗口中mingw32-make即可继续编译。
问题4:
编译的时候报错:i386 architecture of input file `CMakeFiles\opencv_core.dir/objects.a(vs_version.rc.obj)’ is incompatible with i386:x86-64 output
通过Add Entry添加OPENCV_VS_VERSIONINFO_SKIP=1(BOOL)后,此问题得到解决
备注:
注意,以上的都是按照32位的版本进行记录的,编译64位版本的时候将对应的编译器等版本改为64位版本即可