从零开始:数字图像处理的编程基础与应用
上QQ阅读APP看书,第一时间看更新

1.2 OpenCV 编程环境搭建

本书使用的编程语言为C++,编程环境可为Visual Studio或Qt,读者可根据自己的偏好搭建相应的编程环境,例如使用“Visual Studio 2019 + OpenCV 4.4”,或者“Qt + OpenCV 4.4”。下面将详细介绍软件环境搭建方法。

· 1.2.1 Visual Studio 2019安装

Visual Studio 2019(VS 2019)安装包可直接在Visual Studio官方网站下载,下载页面如图1-1所示。

图1-1 VS 2019下载页面

下载VS 2019安装包后,双击打开安装包开始安装,安装页面如图1-2所示。

图1-2 VS 2019安装页面

单击“继续”按钮,选择“Visual Studio Community 2019”选项,单击“安装”按钮。安装组件选择“使用C++的桌面开发”,如图1-3所示。设置VS 2019安装路径为D:\VS,并对下载缓存进行设置,如图1-4所示。

图1-3 开发组件的选择

图1-4 VS 2019安装位置

单击“安装”按钮,如图1-5所示,下载时间较长,请耐心等待,下载安装完成后重启计算机即可使用VS 2019。

图1-5 开始下载安装

· 1.2.2 Qt 安装

Qt是一个跨平台的C++开发库,主要用来开发图形用户界面(Graphical User Interface,GUI)程序,当然也可以开发不带界面的命令行用户交互(Command User Interface,CUI)程序。本书将使用Qt来编写程序。本书使用的Qt版本号为5.9.9,系统环境为Windows 10。

打开Qt官网,进入下载界面,选择5.9版本后,进入下载地址界面,找到qt-opensource-windows-x86-5.9.9.exe安装包下载即可,如图1-6所示。

安装向导如图1-7所示。本书中Qt的安装目录为D:\QT,Qt代码存放路径为D:\QTCode(例如第1章的代码,Qt代码路径为D:\QTCode\1),图像路径统一为D:\images。

图1-6 下载Qt

图1-7 安装Qt向导

单击“Next”按钮,进入下一步欢迎界面,如图1-8所示。

单击“下一步”按钮,选择具体的安装目录,如图1-9所示。

选择安装目录后,选择要安装的组件,如图1-10所示。图中勾选了32位选项,64位计算机建议勾选第二个64位选项。

选择安装组件后,使用默认安装工具即可,如图1-11所示。建议在图1-10和图1-11中同时勾选MinGW 编译器(注意选64位或32位)。

图1-8 欢迎界面

图1-9 自定义安装目录

图1-11 默认安装工具

图1-10 选择安装组件

同意许可协议如图1-12所示。

单击“下一步”按钮开始安装,安装完成后如图1-13所示,Qt Creator启动页面如图1-14所示。

图1-12 同意许可协议

图1-13 Qt安装完成

图1-14 Qt Creator启动页面

Qt在统信Unity Operating System(UOS)上面的安装比较简单,在统信UOS的桌面单击鼠标右键并选择“在终端中打开”,打开UOS的命令行终端,在命令行终端输入如下安装命令即可完成Qt的安装。

$ sudo apt-get install qt5-default qtcreator

输入命令后,sudo(类似于Windows的添加/删除程序)自动从网络下载所需的包,例如开发工具Qt Creator,编译器QMake,帮助文档,开发样例,等等,下载时输入字母y确认下载即可。

· 1.2.3 OpenCV Release版本安装

OpenCV 4.4安装包可直接在官网下载。OpenCV包括Release(发行)版和Debug(调试)版,对于初学者来说,直接下载源码编译比较困难,可以下载Release版配置后运行。本书附录2给出了OpenCV 4.4源码和opencv_contrib模块的编译配置过程。

这里首先介绍Release版的安装配置过程。下载Release版后(约203兆字节,安装包名为opencv-4.4.0-vc14_vc15.exe),双击打开安装包,指定解压缩目录为D:\OpenCV,如图1-15所示。

图1-15 指定解压缩目录

· 1.2.4 VS 2019中OpenCV 4.4环境的配置

在VS 2019中配置OpenCV 4.4的具体过程如下。

(1)右击“此电脑”图标,选择“属性”命令进入系统窗口。选择左侧的“高级系统设置”选项,打开“系统属性”对话框,选择“高级”选项卡,然后在最下方单击“环境变量”按钮。在系统变量 Path中添加以下路径。

D:\OpenCV\opencv\build\x64\vc15\bin

注意在前面变量前添加“;”,以便与另外一个路径分开。

(2)设置VS环境变量。

新建VS空项目HelloCV,并设置项目为Debug x64模式(若需设置Release模式,则设置项目为Release x64。建议设置两种模式),如图1-16所示。

图1-16 设置Debug x64模式

(3)添加属性表。

单击“视图”菜单,然后选择“其他窗口”命令,选择“属性管理器”子命令,打开“属性管理器”面板。在“属性管理器”面板的Debug | x64 文件夹中添加新项目属性表,命名为OpenCV440Debug,如图1-17所示。

图1-17 添加属性表

(4)编辑属性表。

在OpenCV440Debug属性表上右击,在弹出的快捷菜单中选择“属性”命令,对该属性表进行编辑,具体步骤如下。

①选择左侧“通用属性”目录下的“VC++目录”选项,在右侧“常规”列表中选择“包含目录”选项,在弹出的“包含目录”对话框中单击“添加”按钮,添加以下目录,然后单击“确定”按钮,如图1-18所示。

D:\OpenCV\opencv\build\include

图1-18 添加“包含目录”

②在“常规”列表中选择“库目录”选项,在弹出的“库目录”对话框中添加以下目录,然后单击“确定”按钮,如图1-19所示。

D:\OpenCV\opencv\build\x64\vc15\lib

图1-19 添加“库目录”

③选择左侧“通用属性”目录下的“链接器”选项,选择其下方的“输入”子选项,在右侧“附加依赖项”中添加以下文件,如图1-20所示。

opencv_world440d.lib

图1-20 添加“附加依赖项”

opencv_world440d.lib文件名中的最后一个字母“d”表示VS生成解决方案为Debug模式。如果为VS中设置Release模式,注意去掉该字母。

(5)确认更改,退出属性编辑器。

(6)进行测试(此处代码暂时不予解释,将在1.3节介绍)。

编辑测试代码源.cpp文件,内容如下。

#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
using namespace std;
using namespace cv;
int main(int argc,char** argv)
{
String imageName("touxiang.jpg"); //默认文件
if (argc > 1)
imageName = argv[1];
Mat image = imread(samples::findFile(imageName), IMREAD_COLOR); //读取文件
if (image.empty()){  //检查无效输入
cout << "Could not open or find the image"<< endl;
return -1;//依次处理
}
namedWindow("Display window", WINDOW_AUTOSIZE); //新建一个显示窗口,默认图像大小
imshow("Display window", image);                // 在窗口中显示图像
waitKey(0);   // 无限等待,直到有按键被按下结束
return 0;
}

注意:将图像文件touxiang.jpg放到源.cpp文件所在的目录下,程序运行结果如图1-21所示。

图1-21 程序运行结果

那么,是否每次新建项目都需要配置属性表呢?其实并不需要,有下面两种方法可以使用。

方法一:将此项目作为一个模板,以后新建项目时都复制此项目,在其基础上进行编辑。

方法二:此项目创建好之后,会在项目根目录下形成OpenCV440Debug.props文件,将此文件复制出来,放到一个固定目录下,以后新建项目时在属性表里单击“添加现有属性表”按钮,导入该文件即可。

· 1.2.5 Qt 5.9.9中OpenCV 4.4环境的搭建

编译Qt程序常用MinGW和MSCV编译器。由于MinGW编译器需要用CMake重新编译源码,操作起来较为烦琐,因此本书采用MSCV编译器,且通过配置Qt工程中的.pro文件添加OpenCV的库文件和头文件。搭建过程如下。

(1)打开Qt Creator,新建C++项目,如图1-22所示。

图1-22 新建C++项目

(2)设置项目名称、路径,如图1-23所示。

注意,Qt代码路径统一为D:\QTCode,第1章的程序和代码对应的Qt代码路径为D:\QTCode\1。

图1-23 项目名称、路径

(3)选择编译器。这里可选的编译器有QMake、CMake等,默认使用Qt自带的QMake编译工具。

(4)工程配套选择“Desktop Qt 5.9.9 MSVC2015 32bit”(应与图1-10选择的组件对应),如图1-24所示。

图1-24 工程配套选择

(5)不需要配置工程管理则此处保持默认设置,单击“完成”按钮,如图1-25所示。

图1-25 工程管理

(6)项目创建完成后可以看到项目目录和文件,如图1-26所示。

图1-26 项目目录

第一次构建Qt项目时可能会出现文件不属于项目的警告提示,如图1-27所示。

图1-27 警告提示

单击左侧的项目,配置项目模式,如图1-28所示。进入项目模式后,可以看到项目配置窗口,如图1-29所示。

图1-29 项目配置窗口

图1-28 配置项目模式

单击“Manage...”按钮,配置编译工具(应与图1-10中对应),如图1-30所示。

图1-30 配置编译工具

按图1-31所示,务必在这一步选择正确的组件,否则后续构建时会出现错误,注意x86(代表32位)与64位计算机不兼容。

选择正确的C++编译器Microsoft Visual C++ Compiler 16.6.30320.27(amd64)即可,不需要配置C语言编译器(本书使用C++进行开发),如图1-32所示。

至此,问题得到解决。

图1-31 Kits配置

图1-32 选择C++编译器

(7)双击OpenCVTest.pro文件进行编辑,添加如下OpenCV配置。

添加OpenCV的头文件和库文件,头文件只需要添加所在路径即可,库文件则需要提供库文件的所在路径,以及编译的时候链接到哪一个库文件,如图1-33所示。

# 导入头文件
INCLUDEPATH+=D:/OpenCV/opencv/build/include
INCLUDEPATH+=D:/OpenCV/opencv/build/include/opencv2
# 导入库文件
win32:CONFIG(debug, debug|release):{
LIBS+=-LD:/OpenCV/opencv/build/x64/vc14/lib\
-lopencv_world440d
}
else{
LIBS+=-LD:/OpenCV/opencv/build/x64/vc14/lib\
-lopencv_world440
}

图1-33 在.pro文件中添加OpenCV的头文件和库文件

(8)编写测试程序main.cpp文件,具体内容如下。

#include<iostream>
#include<opencv2/core.hpp>
#include<opencv2/imgcodecs.hpp>
#include<opencv2/highgui.hpp>
using namespace std;
using namespace cv;
int main(int argc,char** argv)
{
String imageName("D:/images/touxiang.jpg"); //默认文件路径
if (argc > 1)
imageName = argv[1];
Mat image = imread(samples::findFile(imageName), IMREAD_COLOR); //读取文件
if (image.empty()){  //检查输入文件
cout << "Could not open or find the image"<< endl;
return -1;
}
namedWindow("Display window", WINDOW_AUTOSIZE); //创建窗口显示
imshow("Display window", image);                //显示图像
waitKey(0);   //等待键盘事件
return 0;
}

注意:图像路径统一为D:\images,在该目录下放置图像touxiang.jpg,如图1-34所示。

图1-34 图像放置路径

(9)对工程进行QMake编译。将鼠标指针移动到左侧的工程名上右击,在弹出的快捷菜单中选择“qmake”命令进行QMake编译。QMake编译根据实际环境创建项目文件.pro,生成适当的Makefile文件。这个步骤如果不执行,后面无法编译运行。

如果状态栏下方的“编译输出”窗口没有出现异常错误提示,则表示编译通过,如图1-35所示。

图1-35 编译程序

(10)QMake编译通过之后,将鼠标指针移动到左侧的工程名上右击,在弹出的快捷菜单中选择 “构建”命令。同样,此时下方的“编译输出”窗口没有出现异常错误提示,则表示编译通过,此时才生成可执行的.exe文件,如图1-36所示。

图1-36 构建项目

(11)编译生成.exe文件之后,可以单击Qt Creator窗口左下方的三角形按钮,运行编译通过的测试程序,如图1-37所示。

图1-37 运行程序

(12)程序运行结果如图1-38所示。

图1-38 程序运行结果

在Qt中编译运行的顺序为先执行QMake,然后构建,最后运行。

这里需要特别注意的一点是,OpenCV基础模块的Release版安装完成后,可以满足大多数初学人员的正常使用需要,但有很多非常实用的功能并没有被集成在基础模块中,而是被放在被称为opencv_contrib的扩展模块中,例如人脸识别、生物视觉、特征点提取等众多非常强大的功能。扩展模块是对基础模块功能的补充,欲了解OpenCV 4.4源码和opencv_contrib模块的编译与安装,请参考本书附录2。