2024年6月6日发(作者:)
第19卷第11期 牡丹江大学学报
Vo1.19 No.11
2010年l1月 Journa 1 of Mudanj iang UniYOrS i ty
Nov. 2010
文章编号:1008.8717(2010)l I.0105.02
基于OpenCV的VC2008程序开发
王 雪艳
(牡丹江大学,黑龙江牡丹江157011)
摘要:针对图象处理的工程应用问题,主要介绍了开源视觉类库OpenCV的特点。然后结合Picture控件及
Cwlma ̄类,在VC2008 MFC开发环境下利用OpenCV来具体实现程序的应用开发。
关键词:OpenCV;VC2008;MFC
中图分类号:TP3l1 文献标识码:A
一
、
引言
程序代码简单,也可以减少界面编程等开发代码的时间,
随着摄像机的多功能化,计算机处理能力的提升以
使研究人员的思索重点在于算法的具体实现上。在实际
及视觉算法越来越成熟,计算机视觉这~领域在飞速发
的工程开发过程中,往往会采用VC下的MFC进行工程
展。同时。OpenCViE在扮演一个非常重要的角色 。
开发。这主要是因为在工程项目中需要设计一些界面,
OpenCV(Open Source Computer Vision Library),是由Intel
便于软件应用人员的使用。MFC提供了可视化编程,使
公司带头开发的开源视觉类库。之前,Intel的IPL(Image
得项目开发人员可以把精力主要用在具体功能的实现
Processing Library)提供一些底层的图像处理函数。IPL
上,而对界面设计则通过可视化工具较容易地实现。
属于IPP(Integrated Performance Primitives),而IPP是收
OpenCV 1.1 prela的Release notes中未提到目前OpenCV
费的,源代码也不公开。OpenCV却是免费的,源码也对
在Windows系统下是否支持VS2008。基于这个问题,本
外开放,同时还为Intel公司的IPP提供了透明的接口。
文在VC2008开发环境下,结合OpenCV开发了一个图
OpenCV主要是用C/C++函数写的,并且可以在Linux,
象与视频处理程序,利用此程序我们可以对图片进行灰
Windows和Mac OS X等环境下运行。在OpenCV中有很多
度化,计算其直方图,边缘检测,以及对视频图象进行
图像处理和计算机视觉领域的成熟算法,研究人员可以
跟踪。从而实现OpenCV在VC2008下程序的开发。
在前人已完成的成熟算法的基础上去开展自己的工作,
二.关键技术的编程实现
这使得其成为我们研究开发的首选也是不容置疑的。
(一)实验环境
Intel公司继OpenCV 1.0版本发布后,经过两年的不懈努
实验是基于如下平台进行开发的:操作系统:
力,终于在2008年lO月15日发布了新的版本 Windows XP Professional Service Pack 2;开发工具:Visual
0penCV
1.1prela[
一
。
这一版本较1.O版本相比,变化较大 Studio 2008;OpenCV采用OpenCV1.1prela版本。
的是1.0版本的cvcam模块已经移除,而视频输入等相关 在MFC框架下可以结合Picture Control与Cvvlmage
功能都集合到Highgui模块中,但目前OpenCV仍然不能支
类进行图片显示i皓j用以及调用OpenCV函数进行图象处
持Borland编译器以及64位Windows系统 。
理。
OpenCV中,用Ipllmage结构创建和处理图像,
(二)实验过程
这一结构定义来源于IP 。同时,它也提供 Cvlmage
1.开发环境配置
类与CvvImage类来封装Ipllmage结构。在对 像处理的
(1)安装OpenCV。首先需要将<opencv—root> ̄in
过程中,是对Ipllmage结构进行处理的,而造两个图像
目录添加到系统Path变量,这样是为了在运行程序时,
类还提供一些函数来调用图像对象等功能操“=。在本文 使程序能够找到所需的OpenCV动态链接库文件。此处
程序实现过程中,主要是用了Cvvlmage类。Cvvlmage
<openev—root>\为OpenCV安装的路径。
类提供的DrawToHDC函数可以绘制图像的ROI区域到
(2)配置VC2O08
DC指定区域去。
①在Tools一>Options一>Projects and Solution一>VC++
在Windows系统环境中,开发工具我们选择了
Directories一>Show directories for下拉列表框选择Library
Microsoft公司于2007年1 1月推出的Visual Studio 2008。 ifles添加路径:<opener_root>qib
利用Wi ldow系统结合VC开发] 具时,OpenCV提供的
 ̄Show directories for下拉列表框选择Include Files
彳艮多源代码都是基于控制台下开发的。在控制台下开发,
添加如下路径:
收稿日期:2010-05—12
作者简介:王雪艳(1974~),女,黑龙江省呼兰人,牡丹江大学副教授,工学硕士,研究方向:计算机技术。
105
<opencv_root>\cxcorekinclude
<openev_root>\cvkinclude
<opencv root>\cvaux ̄nclude
<opencv_root>\mlkinclude
2.建立OpenCV项目
在VC 2008中创建一个MFC AppWizard(exe)项目
ImgProcess,本实验采用基于对话框的应用开发。项目添
加库可以通过ProjectlSetting设置,在stdafx.h中添加如
下代码:
#pragma comment(1ib,"cxcore”) ,丰数据结构与
线性代数支持 ,
却ragma comment(1ib,"CV”)
主要的
openCV函数 ,
#pragma comment1(ib,"ml”)
,术机器学习,包
括模式分类和回归分析等 ,
#pragma comment1(ib,"cvaux”)
/ 辅助的
openCV函数 ,
3.添加控件显示图片
(1)在类ClmgPmcessDlg中添加变量及其类型
Ipllmage*m
_
ImgSrc; OpenCV对图像进行处
理时采用的结构 /
CvvImage m_pImgLeft; MFC中通过此变量将
IplImage图片显示到控件 /
IplImage gray;
char charifle[255];
CString ifle
—
name;
CRect rt;
CDC pDC;
(2)添加Picture Control控件,并添加Cstatic变量
m
picLefl;
_
(3)添加“打开图片”按钮,将打开的图片显示到
Picture Control上:
void ClmgProcessDlg::OnOpenpic0
{
CFileDialog dig(true);
if(dlg.DoModal0==IDOK)
{
ifle
_
name=dig.GetFileName0;
CStringToCha ̄file_name,eharfile);/*自定义函数,将
Cstring转换为Char类型}/
m
_
ImgSrc=evLoadImage(eharfile,1);
j
m
_
pImgLeft.CopyOf(m_ImgSrc,一1); /*Cvvlmage类
才提供将图片显示于HDC上的功能 ,
pDC=m
_
picLeft.GetDC0; ,丰获取Picture Control
句柄 ,
rt.SetReet(O,0,m_pImgLeft.Width0,m_plmgLef1.Height(
)); m_pieLeft.SetWindowPos(NULL,0,0,
300,360,SWP-NOZORDERISWP_NOMOVE);
/ 设置Picture Control的位置信息 /
m
_
picLeft.GetClientReet(&rt); 使图片的显示大小
与Picture Control的大小一致卓,
1O6
nl
pImgLef1.DrawToHDC(pDC->GetSafeHdc0,&rt);
将CvvImage图在控件显示 ,
】
另外,还需要在MFC上显示视频,通过
cvQueryFrame函数获取视频文件中的每一帧图象保存为
IplImage*格式,采用同样的方法处理显示。在
OpenCV1.1prela版本中已添加了对DirectShow的支持,
可见OpenCV对视频数据也提供了很大的支持。
4.添加按钮对RGB图作灰度化处理
void CImgProcessDlg::OnMenuOpenvideo0
{
,/将RGB图像转换为灰度图像
rgay=cvCreateImage(evSize(imgsrc一>width,imgsrc一>hei
ght),IPL_DEPTH一8U,1);
cvCvtColor(imgsrc,gray,CV_RGB2GRAY);
Display0nRight(gray);,,自定义函数,将图象显示在
右边的控件上
)
三、程序结果
最后,我们给出实验结果图。这是VC2008 MFC环
境下调用OpenCV函数进行直方图计算的结果显示图。
……
薮
蠹-自雌一-
黪 瞄
瞳目- i
{
|.1
—— 搿 I
_鞫圈
●■■
I 奠
.
1.
l i—I 圈I 曩圈 I 瞄8 ll
瞄
_ 豳
图1 对lena.jpg转换为灰度图的显示结果
国2对灰度函讦算
■
图酌豆春结巢
四、结语
OpenCV--直以来得到Intel公司的支持,并且获得了
Willow Garage公司的资助,这无疑是如虎添翼。基于
openCV的免费陛,再加上本文中讲述的在MFC环境下调
用图像处理方法,我们可以将其应用在近期的工程开发
项目中。除此之外,0penCVl ̄J含很多计算机视觉领域的
算法,可以基于此平台进行处理。
参考文献:
【1]Gary Bradski,Adrian
Kaehler.Leaming OpenCV
Computer Vision witIl
the OpenCV Library[M】
O’REILLY,2008,(3).
【2】陈胜勇,刘盛.基ff-OpenCV ̄计算机视觉技术实现【M】.
科学出版社,2008.
[3]http://sourceforge.net.
f4]Open Source Computer Vision Library Reference
Manual[M1.2001.
[5】刘瑞祯,于仕琪.OpenCV教程——基础篇【M】.北京:北
京航空航天大学出版社,2007.


发布评论