opencv这个工具来进行图像处理。大致是使用C++语言编写程序实现识别算法的实现,所以首先就要进行opencv与VS环境的配置。
Shaine属于那种半路出家之人都算不上的那种,本科期间三四年来学习的真是半吊子,开发方向的东西完全就是一窍不通。而作为一个giser,不可避免的会涉及到开发,也免不了图形图像处理的东西,所以,Shaine打算借着毕设这个机会,自己独自着手一个小项目,从需求、现有研究状况、可引用的经典算法等开始,重学GIS开发,初步学习opencv相关内容。
之前花了四五天的时间来下载、安装软件,也按照网上的配置教程进行了环境的配置,在测试时各种抛异常,各种引用不正确,就是没有成功。Shaine当时也是百思不得其解。因为本科时只学了C和C#两门编程语言,且自身学的很浅,C++也不懂,这也算是一大障碍吧。无奈,重装系统后重新开始配置,所以呢,Shaine汲取到的教训就是:
1. 在按照网上教程安装软件、配置环境时,一定要先把整个流程看完,有个大致的了解,明白其的原理,切忌按部就班粘贴复制某些操作步骤中的内容,因为每个人的计算机文件夹、命名都是不同的,只有了解其原理时,在32/64位选择、版本等时才能对症下药,否则只会走上不断重配重装甚至重装系统的道路。
2. 每款软件在计算机上尽量只安装一种稳定性、兼容性较高的版本,不要安装两个或者三个版本来撑内存。Shaine以血的教训告诉大家,当时Shaine就是安装VS2010/2013/2015三个不同的版本,你说Shaine是不是吃饱了撑着了?
3. 安装任何软件时不要出现汉字命名的文件夹,不管你是安装中文软件还是英文软件,因为对于英文软件在安装时一旦出现中文名的文件夹,在路径识别时很可能会出错,所以保险起见,还是乖乖英文命名吧。
4. 在涉及到两款或者多款软件在进行环境搭建时,最好先在网上查找一下两款软件相互匹配的版本分别是多少后再下载安装。比如opencv配置VS,opencv3.2就需要vs2015来配置,因为只有vs2015里面的vc14才能与opencv里面vc相匹配,我们才能直接调用软件包里面编译好的类库,否则还得自己进行手动编译。
好了,Shaine就不在扒拉废话了,先来谈谈Opencv和vs的配置步骤。
一、安装包的下载与安装
Opencv可免费到官网上去下载,opencv是国外软件,在下载是由于受资源的限制,可能会出现下载缓慢甚至下载失败的情况,没事,直接重新下载就是呢。
附上官网链接:http://opencv.org/downloads.html
关于安装,倒不如说是解压。如图,直接解压到目标文件夹下就行啦。
VS2013想必每个开发人员都接触过,也安装过N多次啦,Shaine在此就不再赘述啦。
二、环境变量的配置
计算机→右键属性→高级系统设置→高级→环境变量,在用户变量中,点击新建,变量名为opencv,变量值为:D:Softwareopencvuild(即你opencv安装的build文件路径);系统变量path,点击编辑,添加D:Softwareopencvuildx86vc12in。
说明:说明:不管你系统是32位还是64位,路径目录均选择X86,因为编译都是使用32位编译。
三、新建Visual C++项目
打开VS,新建项目,选择模板下的vc++,新建win32控制台应用程序。跳出应用程序向导,点击下一步,勾选上附加选项中的空项目,点击完成。(勾选空选项目的在于为下面的各项设置建立一个模板,之后不用每次建项目都进行配置了)
在解决方案的源文件中新建c++文件(.cpp文件)。
在属性管理器中进行如下操作:
在Debug|Win32的Microsoft.Cpp.Win32.user处双击进入属性页,进行如下设置:
1、 通用属性→VC++目录:
包含目录中添加:
D:Softwareopencvuildincludeopencv2
D:Softwareopencvuildincludeopencv
D:Softwareopencvuild
库目录中添加:D:Softwareopencvuildx86vc12lib
2、 通用属性→链接器→输入→附加依赖项,在依赖项中输入lib库中的各项.lib文件名称:
opencv_calib3d2413d.lib
opencv_contrib2413d.lib
opencv_core2413d.lib
opencv_features2d2413d.lib
opencv_flann2413d.lib
opencv_gpu2413d.lib
opencv_highgui2413d.lib
opencv_imgproc2413d.lib
opencv_legacy2413d.lib
opencv_ml2413d.lib
opencv_nonfree2413d.lib
opencv_objdetect2413d.lib
opencv_ocl2413d.lib
opencv_photo2413d.lib
opencv_stitching2413d.lib
opencv_superres2413d.lib
opencv_ts2413d.lib
opencv_video2413d.lib
opencv_videostab2413d.lib
在Releae|Win32的Microsoft.Cpp.Win32.user处双击进入属性页,进行和Debug中一致的操作,其实以上都是D:Softwareopencvuildx86vc12lib下所有的lib文件,你会发现,有的后面带上d,有的没有d,这是因为Debug的就有d,Release则没有d。
四、最终的测试
Shaine以显示一张图片来测试整个配置过程的准确性。
新建一个.Cpp文件,输入以下代码:
注意代码证图片路径的输入格式,本来Shaine中图片的目录是这样的:D:LiHongBlind Way RecognitionMyProject est1_0228 ;但是你注意没有,整个路径的输入中,所有“”都变为了“\”,就连加入文件名时也要加上“\”。
运行结果如下:
至此,整个配置过程已成功完成。
五、其他说明
在测试时,你可能会和Shaine一样遇到如下问题:
1.VC++中“在查找预编译头使用时跳过”
出现这种状况的原因是没有在cpp文件最前一行添加#include “stdafx.h”,解法有:
法一:去掉预编译头
项目→属性→配置属性→C/C++→预编译头→创建使用预编译头→不使用预编译头
法二:将包含文件加到预编译头stdafx.h文件中
法三:在每个.cpp中包含预编译头stdafx.h文件
注意:#include “stdafx.h”一定要添加到cpp文件的第一行。
2.调试解决方案后会出现一堆类似于windowSysWOW64gdi32.dll无法查找或打开PDB文件的问题,这是由于.dll库没有正确的链接进去以至于调试时无法调用相关类
调试→选项和设置→调试→常规→勾选上“启用资源服务器”
调试→选项和设置→调试→常规→勾选上“微软符号服务器”
其实到了最后,Shaine哪怕把整个测试项目已经运行起来了,但还是存在少数dll无法调用的情况。Shaine也是很头疼和郁闷,还要不断的找原因哦。
备注:Shaine在试验多次之后,老是报下图中的错,后来请教了一位学长,原因是配置次数过多,然后可能引起了附加依赖项的错误,采取了把附加依赖项中的内容删掉之后重新添加一遍,并不勾线左下角的选项,保存设置及VS,关闭项目,重新打开即可解决问题。