前言
opencv是一个跨平台计算机视觉库,使用前需要把它编译成二进制的静态库和动态库,之后在代码中直接连接到二进制库。
网上很多教程都是用CMake配合MinGW编译opencv,其中需要用到命令行操作,其实有更简单的方法,Qt Creator支持CMake,可以直接用Qt Creator在图形界面中编译好opencv。
对于各个C++ IDE的看法
我试过vs2015,eclipse,code blocks,Qt Creator,各有优缺点。
vs2015
opencv for windows中有已经编译好的文件可以直接调用,不需要再手动编译opencv。但是vs太过庞大,功能复杂,打开界面十分缓慢,用起来有点麻烦,不适合初学者。并且vs只能在windows上用,我更喜欢多平台通用的IDE。eclipse
打开界面的速度比vs还要慢,果断放弃。code blocks
功能强大,界面不太漂亮,比vs还要复杂的界面让新手无所适从。Qt Creator
Qt Creator的界面很简洁美观,启动速度很快,并且适合以后用Qt开发图形交互界面,支持windows、Linux、Mac多个平台,内联CMake,十分适合新手作为开发环境。
准备
- 安装CMake
- 安装Qt Creator
- 下载opencv
1. 安装CMake
编译opencv需要用到CMake这个工具。
下载:https://CMake.org/download/
建议下载安装版的,这个可以自动加入系统环境变量。
安装,选择第二个,为所有用户添加系统路径。之后Qt可以自动找到CMake。
2. 安装Qt Creator
下载:https://www.qt.io/download-open-source/#section-2
选择离线安装包,在线安装太慢,经常会安装失败。选择MinGW版本。VS 版本还需要安装对应的VS,单独安装Qt 是不可用的,而MinGW版本自身带有MinGW。
建议下载最新版本,因为里面带的MinGW版本较高,如果MinGW版本比opencv需要的版本低会编译失败。
安装:安装路径不能有空格,我安装在默认路径,然后一路NEXT。
3. 下载opencv
下载opencv for Linux
http://opencv.org/downloads.html
opencv for windows 跟 opencv for Linux 的源码是一样的,只是
opencv for windows 里面多了以编译好的 opencv,这个我们不需要,只要下载源码就行了。
如果编译失败,试试其他版本的opencv。
我在Ubuntu上编译3.1版失败,编译2.4.13和3.0.成功,在windows上编译3.1成功,3.0却失败,试了不少于10次,之后才意识到跟MinGW版本有关,MinGW版本要跟opencv版本对应才能编译成功。
编译opencv
确认Qt成功找到 CMake
打开 Qt Creator,工具->选项->构建和运行->CMake,如果之前 CMake 配置好了系统路径,这里应该会自动加载到系统路径,否则手动指定CMake的路径。
用 Qt 打开 opencv 项目
【Open Project】打开 opencv 的 CMakeLists.txt
之后会出现一个 Configure Project 窗口,配置编译时产生的中间文件保存的路径,这些不用改,直接点击 Configure Project 按钮。中间文件会保存在跟 opencv 的文件夹在同一路径的一个文件夹,编译完删掉就好了。
进入【项目】,编译构造配置选择Release。
然后等几分钟,这段时间 Qt 正在读取 CMakeLists.txt 文件,当在概要信息看到 Configuring done 和 Generating done 就读取完了。
进入【项目】,找到 CMAKE_INSTALL_PREFIX,设置一个路径,这个路径是编译完成后输出的路径。其他配置保持默认。然后点击 Apply Configuration Changes。未保存的内容会是粗体字,已改变的配置将会是斜体字,再点一次 Apply Configuration Changes,Apply Configuration Changes 按钮将会变成灰色。
再到构建步骤,详情,勾选install,然后点右下角的“锤子”,开始构建。构建过程要保持网络通畅,因为构建时会下载部分文件。这个过程会花半个小时左右,当“编译输出”中显示“正常退出”,表示构建成功,在 CMAKE_INSTALL_PREFIX 路径中可以看到产生的文件。如果编译失败,则换个opencv版本,重新尝试。
配置opencv开发环境
编译好的opencv会有以下这些文件夹,把这些文件放到合适的位置。我就放在c盘opencv文件夹里了。
配置opencv系统路径
对计算机右键->属性->高级系统配置->环境变量>Path 变量里加入 opencv 的 bin 文件夹的路径,用分号跟其他路径分隔。
新建Qt项目
常用的项目类型的说明:
- Qt console Application:Qt的控制台项目,不创建Qt的图形界面,只会打开一个cmd窗口。
- 【Non-Qt Projectt】->plain C/C++ Application:创建的项目不带有Qt的库,最适合学习C/C++。创建后主程序就已存在一个
Hello World!
示例。
给qt项目添加头文件路径和静态库路径
在.pro文件中添加以下代码。每次新建项目都要添加,好在复制粘贴很方便。
INCLUDEPATH += C:/opencv/include \
C:/opencv/include/opencv \
C:/opencv/include/opencv2
LIBS += C:/opencv/x86/mingw/lib/libopencv_*
测试
新建一个plain C/C++ Application,写入以下代码,cvLoadImage( )函数里填入一张照片的路径,如果能编译成功并显示照片就配置成功了。
注意文件的路径是正斜杠,不是windows路径的反斜杠,如果用反斜杠得这样写:"D:\\Pictures\\RoboMasters.jpg"
#include "opencv/highgui.h"
int main(int argc, char *argv[])
{
IplImage* img = cvLoadImage("D:/Pictures/RoboMasters.jpg");
if (img == NULL)
return 1;
cvNamedWindow("abc",CV_WINDOW_AUTOSIZE);
cvShowImage("abc",img);
cvWaitKey(0);
cvReleaseImage(&img);
cvDestroyAllWindows();
return 0;
}
关于Qt的动态库
在Qt中用Ctrl+R可以成功运行程序,但是直接双击程序运行却会提示缺少libgcc_s_dw2-1.dll
,这是因为缺少Qt的动态库。
解决方法是发布软件时把动态库添加到工程目录里。方法如下:
添加系统环境路径
C:\Qt\Qt5.7.0\5.7\mingw530_32\bin
C:\Qt\Qt5.7.0\Tools\mingw530_32\bin
两个路径之间用分号“;”分隔。做完这一步可以在自己电脑直接双击打开编译好的软件 ,但是在别人电脑里依然是缺少文件。
打包动态库
Qt 官方开发环境里自带了一个工具:windeployqt.exe。
win+r 然后输入 cmd 打开命令提示行,切换到编译完的软件目录下,假设软件名叫 abc.exe,在命令行里输入 windeployqt abc.exe,就会把需要的动态库都复制到该软件目录下。