Qt5.6+Opencv3.1+mingw32+Win10

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位版本即可

 

 

 

 

 

 

 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值