加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

VC调用OpenCV环境设置及程序例子

(2011-04-19 15:40:25)
标签:

杂谈

分类: opencv

方法一:

(1)运行VC 6.0,打开opencv/_make目录下的opencv.dsw文件 然后点击‘组建(Build)‘-‘ 批组建(Batch Build)‘(编译大概几分钟).

(2)点击‘工具(Tools)‘-‘选项(Options)‘-‘目录(Directories)选项卡‘, 在Include files下添加:

J:“Program Files“OpenCV“cv“include

J:“Program Files“OpenCV“otherlibs“highgui

J:“Program Files“OpenCV“cxcore“include

J:“Program Files“OpenCV“otherlibs“cvcam“include

(3)在Library files下添加

J:“Program Files“OpenCV“lib

(4)在Source files下添加

J:“Program Files“OpenCV“cv“src

J:“Program Files“OpenCV“cxcore“src

J:“Program Files“OpenCV“cvaux“src

J:“Program Files“OpenCV“otherlibs“highgui

J:“Program Files“OpenCV“otherlibs“_graphics“src

(5) 谨记:每次建立工程,运行前在‘工程(Project)‘-‘设置(Settings)‘-‘连接(Link)选项卡‘-‘对象/库模块(Object/library modules)‘ 中添加:

cv.lib highgui.lib cxcore.lib cvcam.lib

 

方法二:

在Tools 菜单下选择 Options 子菜单,在弹出的对话框中选择Directory,将用到的几个库的路径添加进去。以后只需将所用的库在Object /library modules下输入就可以了,不用再每次指定路径。

在Show directories for 下拉菜单中选择Include files,输入:

C:\Program Files\OpenCV\cv\include

C:\Program Files\OpenCV\cvaux\include

C:\Program Files\OpenCV\cxcore\include

C:\Program Files\OpenCV\otherlibs\highgui

C:\Program Files\OpenCV\otherlibs\cvcam\include

 

选择Source files,在其中添加

C:\Program Files\OpenCV\cv\src

C:\Program Files\OpenCV\cvaux\src

C:\Program Files\OpenCV\cxcore\src

C:\Program Files\OpenCV\otherlibs\highgui

C:\Program Files\OpenCV\otherlibs\cvcam\src\windows

 

选择Library files,在其中添加

C:\Program Files\OpenCV\lib注意:(防止每次都拷贝.dll文件)

 

在Project Setting ->Link的Input选项中,添加cv.lib cxcore.lib highgui.lib三个库文件(这一步对于每个新工程都要重新设置,而前三步不需要)

 

我的电脑—属性—高级—环境变量—path—C:\Program Files\OpenCV\bin

 

下面给出我所编写的一个简单的应用OpenCV的例子.

(1)建立一个基于Dialog的MFC工程OpenCV_Dlg1,在头文件OpenCV_Dlg1Dlg.h中加入“#include cv.h”,“#include highgui.h”宏命令语句.

(2)添加Picture控件,ID号为IDC_SHOW_WINDOW,图像将显示在该控件中.

(3)给COpenCV_Dlg1Dlg类添加成员变量IplImage m_cvImage,属性为Public.并在构造函数COpenCV_Dlg1Dlg::COpenCV_Dlg1Dlg()中将其初始化为NULL,即添加“m_cvImage=NULL;”语句.

(4)OpenCV有现成的函数cvShowImage()来显示图像,但用该函数显示图像是却是另外开辟了一个弹出窗口并在其中显示,为了在我们建立的Picture控件中显示图像,需在COpenCV_Dlg1Dlg类中添加成员函数void DrawPicToHDC(IplImage img, UINT ID),属性设置为Public.DrawPicToHDC()函数代码为:

void COpenCV_Dlg1Dlg::DrawPicToHDC(IplImage img, UINT ID)

CDC pDC = GetDlgItem(ID)-GetDC();

HDC hDC= pDC-GetSafeHdc();

CRect rect;

CWnd pWnd;

pWnd=GetDlgItem(ID);

pWnd-SetWindowPos( NULL,0,0,img-width,img-height,SWP_NOZORDER SWP_NOMOVE );

pWnd-GetClientRect(rect);

CvvImage cimg;

cimg.CopyOf(img);

cimg.DrawToHDC(hDC,rect);

ReleaseDC(pDC);

//==========================================

(5)添加Button按钮,ID号为IDC_READ_PIC,标题为“读图”,用于打开一幅图片.对该按钮添加消息响应函数OnReadPic():

void COpenCV_Dlg1Dlg::OnReadPic()

// TODO: Add your control notification handler code here

CString Open_Filename;

CFileDialog fDlg(TRUE,"bmp",".bmp",OFN_HIDEREADONLY OFN_OVERWRITEPROMPT,

"原始图像(.bmp) .bmp 所有文件(.) .",NULL);

if (fDlg.DoModal() == TRUE)

Open_Filename = fDlg.GetFileName();

if(m_cvImage)

cvReleaseImage(m_cvImage);

m_cvImage = cvLoadImage(Open_Filename,1);

if (m_cvImage==0)

MessageBox("Reading Failed");

else

DrawPicToHDC(m_cvImage, IDC_SHOW_WINDOW);

//===========================================

至此,运行程序,当点击“读图”按钮时,会弹出对话框,提示用户选择需要读入的图片,“确定”后程序便会在Picture控件中将图片显示出来.

(6)添加Edit控件,ID号为IDC_EDIT_TH,应用向导工具MFC ClassWizard给该ID添加int型的成员变量m_Th.通过Edit控件IDC_EDIT_TH,用户可以输入图像分割阈值,程序会将其自动更新到m_Th.

(7)添加Button按钮,ID号为IDC_THRESHOLD,标题为“阈值分割”,点击它将对业已打开的图片做二值化分割.对该按钮添加消息响应函数OnThreshold():

void COpenCV_Dlg1Dlg::OnThreshold()

// TODO: Add your control notification handler code here

UpdateData(TRUE);

if (m_cvImage==NULL)

MessageBox("NO Source Image Found!","Warning");

else

IplImage dst=cvCreateImage( cvSize(m_cvImage-width,m_cvImage-height), m_cvImage-depth, m_cvImage-nChannels );

cvThreshold( m_cvImage, dst, m_Th, 255, CV_THRESH_BINARY);

//原型:void cvThreshold( IplImage src, IplImage dst, float thresh, float maxvalue,CvThreshType type);

cvNamedWindow("Threshold"); //设置窗口名称

cvShowImage("Threshold",dst); //显示图片

cvWaitKey(0);

//============================================

至此,当点击“读图”按钮打开一幅图片,该图片将在Picture控件中显示;在Edit控件IDC_EDIT_TH中输入阈值,并点击“阈值分割”按钮,则对读入的图像做二值化处理,处理结果在一个新弹出窗口中显示.

以上所编写程序是个试验性程序,从中可以反应出用OpenCV编程的一般性步骤.但该程序依然存在Bug:即显示在Picture控件中的图像不会重绘,也就是说如果用另外一个窗口遮挡Picture控件中的图像,当该窗口移去时被遮挡部分的图像便显示一片空白.此问题有待对程序进一步查错.

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有