文章分为以下几个部分:
1. 问题背景
2. 拨云开雾
3. 如何编译MinGW版OpenCV
4. 如何添加编译好的库文件
5. 代码示例
6. 总结
问题背景:
OpenCV有着强大的图形图像处理功能,我想获取视频某一帧的图片并对图片进行处理,如果仅借助QT去实现是比较麻烦的,但是对于OpenCV来说,这或许是再简单不过的事情。那么问题来了,在QT中如何使用OpenCV?我最初想,使用OpenCV还不简单?把OpenCV的库下载下来在QT里添加库不就行了?然而现实并非想象中的一帆风顺,甚至可以说是很坎坷。添加库之后我自信满满的运行程序,运行的结果却是一行行晦涩的错误报告。我仔细检查了代码的每行语句,检查了添加库的那几行代码,一切都是正常不会有什么错误,这是为什么呢?
拨云开雾:
后来经过多方面资料查找,搞明白了,原来QT Creator默认安装的构建套件是MinGW。OpenCV没有为我们编译好MinGW版,已经编译好的是OpenCV库是MSVC版,MSVC是VisualStudio的默认构建套件,如果在VS下使用OpenCV库,直接把库文件的路径引用过去,程序就可以正常编译链接,但是如果想在MinGW下使用OpenCV,这就需要我们先手动编译好库文件,然后再引用了。
如何编译MinGW版OpenCV:
第一步:下载OpenCV的包解压缩到本地
第二步:下载CMake,安装。
第三步:使用 CMake 生成 OpenCV 的 Makefile。
第四步:在命令提示符窗口编译OpenCV
第五步:添加库的时候,引用的是自己编译生成的库文件路径。
编译OpenCV的详细步骤可以参考这篇文章:https://blog.csdn.net/huihut/article/details/78701814
Ps:编译一次要半个小时左右的时间,而且编译过程非常坑总是会出现一些错误而中途中断。为了编译这个东西,我就搞了好几天,最后果断选择了别人已经编译好的包,用起来美滋滋。
如何添加编译好的库文件:
只需要在.pro文件中添加这两句:
INCLUDEPATH += F:/OpenCV/mingw3.0/mingw-dist/include
LIBS += F:/OpenCV/mingw3.0/mingw-dist/x86/mingw/bin/libopencv_*.dll
第一句写的是编译OpenCV生成的include文件夹的路径,第二句写的是编译OpenCV生成的bin目录里所有的核心dll。
代码示例:
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;
int main()
{
//加载图片,0为单通道图片
Mat image = imread("C:\\Users\\lenovo\\Desktop\\photo\\2.jpg",0);
//判断是否加载成功
if( image.empty() )
{
cout << "Can not load image." << endl;
return -1;
}
//创建窗口
cvNamedWindow("window", CV_WINDOW_NORMAL);
//显示图片
imshow("window",image);
waitKey(0);
return 0;
}
总结:
对比MSVC和MinGW,MSVC是微软的VC编译器,MinGW是一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你在GNU/Linux和Windows平台生成本地的Windows程序而不需要第三方C运行时库。
在Windows的平台上MSVC无疑是强大的,在使用库文件的时候就可以看出来,MSVC版的别人给编译好了,MinGW版的需要自己编译,这待遇的对比,MinGW会很伤心,但是MinGW强在它的跨平台性。所以各有各的好处吧。
{{ cmt.username }}
{{ cmt.content }}
{{ cmt.commentDate | formatDate('YYYY.MM.DD hh:mm') }}