OpenCV的下载安装与VS2013的配置
1、下载和安装OpenCV SDK
在OpenCV的官网http://opencv.org的Release栏目中找到OpenCV for Windows 3.0.0版下载到本地计算机中,文件名为opencv-3.0.0.exe,这是一个自解压程序,双击该程序将其解压到C:盘根目录下,自解压程序会自动创建一个C:\opencv文件夹,并将解压的文件存储在该文件夹下。
2、配置环境变量
电脑桌面上,在计算机图标上用鼠标右键选择属性,再选高级系统设置,再选环境变量,在系统变量栏中双击Path变量打开该变量的编辑系统变量对话框,对于32位系统,在该对话框中变量值一栏的最后输入“;C:\opencv\build\x86\vc12\bin”;对于64位系统,在该对话框中变量值一栏的最后输入“;C:\opencv\build\x86\vc12\bin;C:\opencv\build\x64\vc12\bin”,该操作实际上是指示bin文件夹的路径,vc12表示编译环境为VS2013。
3、新建一个控制台应用程序
打开VS2013,点击“新建项目”,选择新建一个Win32控制台应用程序ConApp1,在应用程序设置页面,选中“空项目”。
在项目解决方案资源管理器的[源文件]处右键单击->添加->新建项->C++文件(.cpp),在下方的名称栏中输入文件名main.cpp,点击“添加”按钮在工程中新建一个cpp源文件。
4、VS2013控制台应用程序的属性配置
在菜单栏中单击“视图”->“其它窗口”->“属性管理器”,VS中就多出一个属性管理器工作区,在属性管理器中进行一次配置,就相当于进行了通用的配置过程,以后新建的工程就不用再额外进行配置了。
在新出现的“属性管理器”工作区中,展开“Debug|Win32”文件夹,对文件夹中的“Microsoft.cpp.Win32.user”右键选择属性,或者双击,即可打开工程最通用的属性页。
配置包含目录:在打开的属性页中,依次选择“通用属性”->“VC++目录”->“包含目录”,在其中添加以下三个目录:
C:\opencv\build\include
C:\opencv\build\include\opencv
C:\opencv\build\include\opencv2
配置库目录:在打开的属性页中,依次选择“通用属性”->“VC++目录”->“库目录”,在其中添加目录:C:\opencv\build\x86\vc12\lib。这里选择x86还是x64要根据选用的编译器决定,而不是根据计算机的操作系统是32位还是64位,不过一般情况下,都是用的win32的x86编译器。
配置链接库:在打开的属性页中,依次选择“通用属性”->“链接器”->“输入” ->“附加依赖项”,在其中添加库文件名:
opencv_ts300d.lib
opencv_world300d.lib
配置完成后,需要重新启动计算机,以使上述配置有效。
当使用上述方法配置成功后,以后再新建控制台应用程序就无需再次配置就可以直接在程序中调用opencv函数。
5、第一个VS2013控制台应用程序
重新打开项目ConApp1,在main.cpp中输入以下代码:
#include <opencv2\opencv.hpp>
using namespace cv; //使用opencv的命名空间
int main()
{ //读入与main.cpp放在同一文件夹下的图像文件Ben*.jpg,并显示该图像。
Mat img = imread(“Bendiquan-04.jpg”);
imshow(“载入的图片”, img);
waitKey(0); //等待按键后退出
}
生成解决方案后启动调试,即可在屏幕上显示指定的图像。
6、新建一个基于对话框的MFC应用程序
打开VS2013,点击“新建项目”,新建一个基于对话框的MFC应用程序MFCCVApp1。
在主对话框窗口中放置一个按钮Button1,其ID为IDC_BUTTON1,双击该按钮,系统会自动生成按钮的消息响应函数:
void CMFCCVApp1Dlg::OnBnClickedButton1()
{
}
7、VS2013的属性配置
经过上述第4步的配置后,项目MFCCVApp1不需要重新配置。在解决方案资源管理器页中选中项目MFCCVApp1,右键选择属性即可看到所有需配置的属性都已配置完毕。
8、第一个VS2013基于对话框的MFC应用程序
打开文件MFCCVApp1Dlg.cpp,在其中加入:
#include <opencv2\opencv.hpp>
using namespace cv; //使用opencv的命名空间
在OnBnClickedButton1()中输入以下代码:
//读入与MFCCVApp1Dlg.cpp放在同一文件夹下的图像文件Ben*.jpg
Mat img = imread(“Bendiquan-04.jpg”);
imshow(“载入的图片”, img); //显示图像
生成解决方案后启动调试,按下按钮Button1即可在屏幕上显示指定的图像。
9、MFC应用程序中使用OpenCV误报内存泄露问题
上述步骤5中所生成的Win32控制台应用程序退出后没有报告内存泄露。
上述步骤8中所生成的MFC应用程序退出后,在输出窗口会报告内存泄露:
Detected memory leaks!
Dumping objects ->
{839} normal block at 0x008D6D68, 24 bytes long.
Data: < > FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00
…
经百度得知,误报内存泄露的原因是opencv_core dll在MFC dll之前加载,解决的办法很简单,就是把项目“属性”->“配置属性” ->“常规” ->“MFC的使用”项的值由“在共享DLL中使用MFC”改为“在静态库中使用MFC”,就不会再提示内存泄露了。