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变量 

picLefl; 

_

(3)添加“打开图片”按钮,将打开的图片显示到 

Picture Control上: 

void ClmgProcessDlg::OnOpenpic0 

{ 

CFileDialog dig(true); 

if(dlg.DoModal0==IDOK) 

{ 

ifle

_

name=dig.GetFileName0; 

CStringToCha ̄file_name,eharfile);/*自定义函数,将 

Cstring转换为Char类型}/ 

_

ImgSrc=evLoadImage(eharfile,1); 

j 

_

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的位置信息 / 

_

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.