今天上完图像工程导论第一节课,看到老师给出了怎么下载opencv、Anaconda和python进行开发环境构建的教程,然后实现类似编程里“Hello World”的程序,但是由于自己是python小白,只学过C和C++,所以想尝试一下用C++来实现图像处理的“Hello World”程序,这样也不用下载Anaconda和python。我主要选择的是opencv库以及VS 2017的平台来实现。下面是具体的步骤。
1、opencv、VS2017的下载
VS的下载可以直接百度搜索Visual Studio官网,然后进入到下面这个网页:
然后点击上面的免费Visual Studio,进入到下面的页面:
然后点击下载最左边的开源社区版即可,现在下载的话应该是2019版但是没什么影响。如果是要在ubuntu之类的Linux系统下操作的话,可以下载中间的Visual Studio Code,它有很多很好用插件,亲测好评,不过这里就不涉及了。
然后是下载opencv,可以自己去官网http://opencv.org/上直接下载,在官网上面点击releases,进入如下界面:
往下拉还有更多的版本,自己选择一个即可,我之前选择的是3.4.0版本的。点击对应的操作系统版本后进入下载界面,但是可能网速会比较慢需要耐心等一下。
下载完成后,双击这个文件后程序会提示我们解压到某个地方,注意要记得解压后的地址,并且不需要自己额外新建一个名字为opencv的文件夹,因为OpenCV 项目文件打包的时候,根目录就是opencv。解压完成后,会在指定的路径下生成名为opencv的文件夹,它包含了两个子文件夹,分别名为 build和sources。其中,build文件夹中是支持OpenCV使用的相关文件,而sources 中为 OpenCV的源代码及相关文件。
2、配置环境变量
在win10系统下使用opencv+VS最主要的就是得配置系统环境变量。可以在桌面左下角的搜索那一栏输入系统变量,就会出现“编辑系统环境变量”的选项,点击进入
进入环境变量后,在界面下半部分的系统变量(S)中找到PATH变量,进行编辑,将上一步opencv解压缩后的位置添加进去,如下:
要添加的具体内容为“...opencv3buildx64vc17bin”和“...opencvbuildx64vc15bin”。如果是32位系统就把x64改成x86即可。
3、Visual Studio项目新建及工程包含目录配置
启动Visual Studio,在新建项目那里选择C++空项目,然后界面如下:
接下来需要进行工程包含目录配置,具体要增加的内容如下:
首先右键单击解决方案资源管理器内的解决方案“Image1(自己起的项目名称)”,再点击最下面的属性,进行配置。在VC++目录下分别进行可执行文件目录、库目录和包含目录的配置,增加内容如下:
可执行文件目录:C:Users57035Desktop视觉文件opencvbuildx64vc17bin
包含目录:C:Users57035Desktop视觉文件opencvbuildinclude
C:Users57035Desktop视觉文件opencvbuildincludeopencv
C:Users57035Desktop视觉文件opencvbuildincludeopencv2
库目录: C:Users57035Desktop视觉文件opencvbuildx64vc14lib
C:Users57035Desktop视觉文件opencvbuildx64vc15lib
然后在“链接器-常规”里面选择“启用增量链接:否”;再往附加库目录中增加一下内容:
附加库目录:C:Users57035Desktop视觉文件opencvbuildx64vc14lib
%(AdditionalLibraryDependencies)
接着是“链接器-输入”中第一个选项“附加依赖项”加入以下内容:
附加依赖项:opencv_world340.lib
opencv_world340d.lib
至此完成工程包含目录配置。另外还要把调试器改为Release X64。
3、“Hello World”程序实现
首先需要在右边解决方案资源管理器的项目解决方案中添加头文件和源文件,程序如下:
targetver.h
#pragma once
// 包括 SDKDDKVer.h 将定义可用的最高版本的 Windows 平台。
// 如果要为以前的 Windows 平台生成应用程序,请包括 WinSDKVer.h,并将
// 将 _WIN32_WINNT 宏设置为要支持的平台,然后再包括 SDKDDKVer.h。
#include
stdafx.h
// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件
//
#pragma once
#include "targetver.h"
#include
#include
// TODO: 在此处引用程序需要的其他头文件
至于源文件,就取决于我们想实现什么功能了。这里以实现“Hello World”程序为例,程序如下:
#include
#include
#include
using namespace cv;
int main(int argc, char* argv[])
{
Mat img = imread("C:Users57035PicturesSaved Pictures1.jpg");//读取目标图片JPG
imshow("原图", img);
waitKey(0);
return 0;
}
这里我们定义数据类型Mat,然后调用imread和imshow两个函数来进行图片的读取和显示。接下来进行调试,成功生成解决方案后即可。(第一次运行可能会花较长时间才能运行完毕得到显示的图片)
4、补充
截图中程序里被注释掉的语句是用来实现读取图片后进行90°选择再显示的功能,我们也可以将相关代码加进去后重新生成解决方案并运行。
#include
#include
#include
using namespace cv;
int main(int argc, char* argv[])
{
Mat img = imread("C:Users57035PicturesSaved Pictures苹果总部.jpg");//读取目标图片JPG
Mat rImg;
rotate(img, rImg, ROTATE_90_CLOCKWISE);
imshow("原图", img);
imshow("旋转", rImg);
waitKey(0);
return 0;
}
以上内容相关程序及项目已经上传到个人的github账号上,可自取。此外还有对图片进行缩放和开启笔记本摄像头功能的两个源程序,也可以自行下载后调试。
https://github.com/LavenSun/ImageProcessing.git