龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

OpenCV初次使用配置及编程示例(2)

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
(5)添加Button按钮,ID号为IDC_READ_PIC,标题为“读图”,用于打开一幅图片。对该按钮添加消息响应函数OnReadPic(): //-----------------------------------------

   (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控件中的图像,当该窗口移去时被遮挡部分的图像便显示一片空白。此问题有待对程序进一步查错。

精彩图集

赞助商链接