VS2010中应用opencv步骤
时间:2026-01-19
时间:2026-01-19
vs2010的MFC中应用opencv的例子
VS2010的MFC中应用opencv步骤
王良元 2011.11.17
如下步骤前提是VC6和Opencv均已正确安装,默认opencv是装在C:\Program Files下,
后面路径都是这个,如果安装到其他位置,只要改为你安装路径即可。
1、 打开VS2010,新建MFC工程,命名,此处为VS2010_OPENCV,如图1
所示。
2、 点击OK后,依次根据需要选择对应的形式,此处依次为基本对话框
(Dialog based)、去掉UNICODE字符集选项,默认的、静态编译(As a
statically linked library),完成,则弹出基本应用程序界面,如图2所示。
vs2010的MFC中应用opencv的例子
3、删除文本框“TODO:在这里设置对话框”,并添加一个图片控件,选中控件,
右键-》属性,将“Type”选择为框架(rectangle),将ID改为IDC_ShowImg,
适当调整控件大小,添加两个按钮,一个将caption改为ReadImg,实现读入图片
功能,另一个将aption改为EdgeDetect,实现边缘检测功能,如图3所示。
4、在MFC工程中添加opencv的库和头文件,在VS2010中新建工程后,在工程名上右键-》
vs2010的MFC中应用opencv的例子
属性-》配置属性-》VC++ 目录的右边分别添加包含目录和库目录,如下图所示
具体添加内容为:
头文件路径:
C:\Program Files\OpenCV\cxcore\include
C:\Program Files\OpenCV\cv\include
C:\Program Files\OpenCV\cvaux\include
C:\Program Files\OpenCV\otherlibs\highgui
C:\Program Files\OpenCV\otherlibs\cvcam\include
库文件路径:
C:\Program Files\OpenCV\lib
5、在“解决方案管理器”面板点击头文件 ,在VS2010_OPENCVDlg.h
下加入如下代码:
#include "cv.h"
#include "highgui.h"
vs2010的MFC中应用opencv的例子
#define IMAGE_WIDTH 256
#define IMAGE_HEIGHT 256
#define IMAGE_CHANNELS 3
然后,在stdafx.h 的#include <afxcontrolbars.h> 下面添加
#pragma comment(lib,"C:\\Program Files\\OpenCV\\lib\\cv.lib")
#pragma comment(lib,"C:\\Program Files\\OpenCV\\lib\\cvaux.lib")
#pragma comment(lib,"C:\\Program Files\\OpenCV\\lib\\cxcore.lib")
#pragma comment(lib,"C:\\Program Files\\OpenCV\\lib\\highgui.lib")
在 类视图面板右击 VS2010_OpencvDlg,右键添加-》添加变量,添加一个
IplImage* 类型的变量 TheImage,如下图,
再双击类视图下面的OnInitDialog,在“// // TODO: 在此添加额外的初始化代码“
”下面添加 TheImage 的初始化代码:
CvSize ImgSize;
ImgSize.height = IMAGE_HEIGHT;
ImgSize.width = IMAGE_WIDTH;
TheImage = cvCreateImage( ImgSize, IPL_DEPTH_8U, IMAGE_CHANNELS );然后双
击 OnPaint,在 if(IsIconic())…的 else 里添加以下代码,用来重绘窗口:
CDialog::OnPaint(); // 重绘对话框
CDialog::UpdateWindow(); // 更新windows窗口,如果无这步调用,
vs2010的MFC中应用opencv的例子
图片显示还会出现问题
ShowImage( TheImage, IDC_ShowImg ); // 重绘图片函数
接着在 CTest_OpencvApp 下面的成员列表中双击 InitInstance,在两个“// TODO:
Place code here to handle when the dialog is…”下面添加:
cvReleaseImage( &dlg.TheImage );即按下“OK”或“Cancel”时,释放TheImage占用的
内存。
6、接下来就是写读取和处理图片的功能函数了。 在资源视图面板双击IDD_VS2010_OPENCV_DIALOG,弹出GUI 编辑界面,双击按
钮 ReadImg,建立按钮点击的消息响应程序,方法为右键按-》添加信息处理事
件,函数处理程序名称设置为 OnBnClickedReadimg,进入代码编辑,
主要的响应操作包括 弹出对话框选择图片文件、读入图片文件、对图片统一缩放至
256*256的大小、显示图像,代码如下:
// TODO: Add your control notification handler code here
CFileDialog dlg(
TRUE, _T("*.bmp"), NULL,
OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY,
_T("image files (*.bmp; *.jpg) |*.bmp; *.jpg | All Files (*.*) |*.*||"),
NULL
); // 选项图片的约定
dlg.m_ofn.lpstrTitle = _T("Open Image"); // 打开文件对话框的标题名
if( dlg.DoModal() != IDOK ) // 判断是否获得图片
return;
CString mPath = dlg.GetPathName(); // 获取图片路径
IplImage* ipl = cvLoadImage( mPath, 1 ); // 读取图片、缓存到一个局部变量
ipl 中
if( !ipl ) // 判断是否成功载入图片
return;
if( TheImage ) // 对上一幅显示的图片数据清零
cvZero( TheImage );
ResizeImage( ipl ); // 对读入的图片进行缩放,使其宽或高最大值者刚好等于 256,再复制到 TheImage 中
ShowImage( TheImage, IDC_ShowImg ); // 调用显示图片函数
cvReleaseImage( &ipl ); // 释放 ipl 占用的内存
其中包含了两个新的成员函数 ResizeImage 和 ShowImage,前者的作用是对读入
的不同大小的图像进行缩放,再通过设置 ROI 的方式将图像存入 256*256 的
TheImage 中;后者是将图像 TheImage 显示到图片显示控件 IDC_ShowImg 窗口的
正中部位。为了实现这两个功能,首先在类视图面板右击 CVS2010_OPENCVDlg,选择 添