前言:
什么是OpenCV?可能还有人不清楚吧,简单地说,OpenCV——Open Source Computer Vision Library,即开源计算机视觉库,它是基于C语言和部分C++语言来开发,可用于计算机视觉、图像处理以及模式识别和跟踪。
一、准备工作:
1.下载OpenCV安装包:
到OpenCV的官网(http://opencv.org/)下载最新版本的OpenCV安装包,由于OpenCV针对不同平台都有安装程序,所以我们只需要根据当前开发环境选择合适的平台版本即可,这里我们是在win7 64bit操作系统下进行开发,所以应该下载OpenCV for Windows:
我们选择了当前的最新版本3.3,下载完毕后,我们得到其安装文件:opencv-3.3.0-vc14.exe
2.安装Visual Studio 2015
这里就不多说,按照提示正常安装即可。
二、安装配置:
1.安装:
双击打开下载好的opencv-3.3.0-vc14.exe文件,进行安装(其实是解压),选择安装目录:
安装完毕之后,在其安装目录下可以看到两个文件夹:build和sources,其中build是OpenCV使用时要用到的一些库文件,而sources中则是OpenCV为我们提供的一些demo示范源码:
2.环境变量配置:
上面步骤只是完成了安装,但是要能够正常使用OpenCV来进行开发,我们还需要进行环境变量的配置,我的电脑—>属性—>高级系统设置—>环境变量,找到Path变量,选中并点击编辑:
64位系统的需要在path添加“;opencv安装路径\build\x64\vc14\bin”(注:英文输入法中的“;”是分割符,用于与前面其他软件的配置参数分开),例如我的配置参数应该为:;E:\OpenCV3.10\opencv\build\x64\vc14\bin。
补充:vc8 = Visual Studio 2005,vc9 = Visual Studio 2008,vc10 = Visual Studio 2010,vc11 = Visual Studio 2012,vc12 = Visual Studio 2013,vc14 = Visual Studio 2015
注:Win下配置了环境变量不需要重启就可以生效的,打开命令提示符执行:echo %PATH%,就可以刷新它了。
3.VS 2015配置:
我们知道要在VS中使用外部的类库的话,需要进行引入的一下配置,这个配置就包括:外部库目录指定和外部包含文件指定。
打开VS 2015,新建一个空白的win32的控制台工程:
选择语言为C++,Win32类型中的控制台工程,并设置工程名称:
指定建立的工程为空白工程:
建立完工程之后,我们选中解决方案栏中的目录(即源码目录),然后新建一个C++源码文件:
在VS中有个叫做“属性管理器”的工具,用于进行VS整体参数的配置,配置一次之后,以后所有新建项目都能应用改配置,不用再一一进行配置操作,使用起来也非常方便。点击工具栏中的:视图—>其它窗口—>属性管理器:
在打开属性管理器窗口之前,先设置生成目标文件为X64
在新出现的属性管理器栏中,展开目录,选中Debug|Win64中的Microsoft.Cpp.x64.user,并右键点击属性进入属性界面:
分别配置:包含目录、库目录,运行库目录
1)配置包含目录:
在通用属性(Common Properties)—>VC ++目录—>包含目录,然后点击右侧三角标志选中Edit进入编辑:
2)配置库目录:
完成上面的包含目录配置之后,我们还需要进行库目录的配置:回到属性界面,选择包含目录下面的库目录:
3)配置运行库目录:
完成上面的库目录配置之后,我们还需要进行库文件的配置:回到属性界面,选择包含目录下面的(运行库目录):
4)配置动态链接库:
我们可以查看步骤2)中添加的库文件目录下面.lib文件列表,发现在3.3.0版本的OpenCV中,仅剩下两个库文件,分别是:opencv_world330.lib和opencv_world330d.lib,这里两个库文件的区别就是:opencv_world330.lib是Release模式版本,而opencv_world330d.lib是Debug模式版本:
注意:别两个版本都加,否则会出现双窗口的问题
三、实践:
在完成了上述所有配置工作之后,我们需要进行一次实测,用于验证以上配置是否成功。这里我们的测试demo功能很简单,就是在一个窗口中显示我们指定的一张图片。在之前的Main.cpp文件中添加以下代码:
#include <opencv2/opencv.hpp>
using namespace cv;
void onMouse(int event, int x, int y, int flags, void* param) { Mat *im = reinterpret_cast<Mat*>(param); switch (event) { case CV_EVENT_LBUTTONDOWN: // 鼠标左键 std::cout << "at (" << x << "," << y << ") value is :" << static_cast<int>(im->at<uchar>(Point(x, y))) << std::endl; break; default: break; } }
int main() { Mat img = imread("IMG_1175.jpg"); // 判断图像是否加载成功 if (img.empty()) { // 未成功直接返回 return 0; } // 创建一个名为 "游戏原画"窗口 namedWindow("游戏原画"); // 在窗口中显示游戏原画 imshow("游戏原画", img); // 图像水平翻转 1:水平,0:垂直,-1:水平+垂直 flip(img, img, 1); // namedWindow("output Image"); // 定义鼠标事件 setMouseCallback("output Image", onMouse, reinterpret_cast<void*>(&img)); // 显示处理后的图像 imshow("output Image", img); // 等待按键 waitKey(0); // 把处理过的图像保存 imwrite("output.bmp", img); // 等待6000 ms后窗口自动关闭 //waitKey(6000); }
将图片IMG_1175.jpg复制到工程目录下面,与源码位于同一目录:
运行工程,假如一切都正常的话,会出现如下结果: