简单应用OpenCV例子
2013-11-28 13:35
344 查看
(1)建立个基于DialogMFC工程OpenCV_Dlg1在头文件OpenCV_Dlg1Dlg.h中加入“# <cv.h>”“#
<highgui.h>”宏命令语句
(2)添加PictureControl控件ID号为IDC_SHOW_WINDOW图像将显示在该Control控件中
(3)给COpenCV_Dlg1Dlg类添加成员变量IplImage * m_cvImage属性为Public并在构造
COpenCV_Dlg1Dlg::COpenCV_Dlg1Dlg()中将其化为NULL即添加“m_cvImage=NULL;”语句
(4)OpenCV有现成cvShowImage来显示图像但用该显示图像是却是另外开辟了个弹出窗口并在其中显示为了
在我们建立PictureControl控件中显示图像需在COpenCV_Dlg1Dlg类中添加成员void
DrawPicToHDC(IplImage *img, UINT ID)属性设置为PublicDrawPicToHDC代码为:
//----------------------------------------------------------------------------
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 notication handler code here
CString Open_Filename;
CFileDialog fDlg(TRUE,"bmp","*.bmp",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
"原始图像(*.bmp)|*.bmp|所有文件(*.*)|*.*||",NULL);
(fDlg.DoModal TRUE)
{
Open_Filename = fDlg.GetFileName;
(m_cvImage)
cvReleaseImage(&m_cvImage);
m_cvImage = cvLoadImage(Open_Filename,1);
(m_cvImage0)
MessageBox("Reading Failed");
DrawPicToHDC(m_cvImage, IDC_SHOW_WINDOW);
}
}
//=
至此运行当点击“读图”按钮时会弹出对话框提示用户选择需要读入图片“确定”后便会在PictureControl控
件中将图片显示出来
(6)添加EditControl控件ID号为IDC_EDIT_TH应用向导工具MFC ClassWizard给该ID添加型成员变量m_Th通过
EditControl控件IDC_EDIT_TH用户可以输入图像分割阈值会将其自动更新到m_Th
(7)添加Button按钮ID号为IDC_THRESHOLD,标题为“阈值分割”点击它将对业已打开图片做 2值化分割对该
按钮添加消息响应OnThreshold:
//----------------------------------------------------------------------------
void COpenCV_Dlg1Dlg::OnThreshold
{
// TODO: Add your control notication handler code here
UpdateData(TRUE);
(m_cvImageNULL)
MessageBox("NO Source Image Found!","Warning");
{
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);
}
}
//
至此当点击“读图”按钮打开幅图片该图片将在PictureControl控件中显示;在EditControl控件
IDC_EDIT_TH中输入阈值并点击“阈值分割”按钮则对读入图像做 2值化处理处理结果在个新弹出窗口中显示
以上所编写是个试验性从中可以反应出用OpenCV编程般性步骤但该依然存在Bug:即显示在PictureControl控
件中图像不会重绘也就是说如果用另外个窗口遮挡PictureControl控件中图像当该窗口移去时被遮挡部分图像
便显示片空白此问题有待对进步查错
<highgui.h>”宏命令语句
(2)添加PictureControl控件ID号为IDC_SHOW_WINDOW图像将显示在该Control控件中
(3)给COpenCV_Dlg1Dlg类添加成员变量IplImage * m_cvImage属性为Public并在构造
COpenCV_Dlg1Dlg::COpenCV_Dlg1Dlg()中将其化为NULL即添加“m_cvImage=NULL;”语句
(4)OpenCV有现成cvShowImage来显示图像但用该显示图像是却是另外开辟了个弹出窗口并在其中显示为了
在我们建立PictureControl控件中显示图像需在COpenCV_Dlg1Dlg类中添加成员void
DrawPicToHDC(IplImage *img, UINT ID)属性设置为PublicDrawPicToHDC代码为:
//----------------------------------------------------------------------------
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 notication handler code here
CString Open_Filename;
CFileDialog fDlg(TRUE,"bmp","*.bmp",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
"原始图像(*.bmp)|*.bmp|所有文件(*.*)|*.*||",NULL);
(fDlg.DoModal TRUE)
{
Open_Filename = fDlg.GetFileName;
(m_cvImage)
cvReleaseImage(&m_cvImage);
m_cvImage = cvLoadImage(Open_Filename,1);
(m_cvImage0)
MessageBox("Reading Failed");
DrawPicToHDC(m_cvImage, IDC_SHOW_WINDOW);
}
}
//=
至此运行当点击“读图”按钮时会弹出对话框提示用户选择需要读入图片“确定”后便会在PictureControl控
件中将图片显示出来
(6)添加EditControl控件ID号为IDC_EDIT_TH应用向导工具MFC ClassWizard给该ID添加型成员变量m_Th通过
EditControl控件IDC_EDIT_TH用户可以输入图像分割阈值会将其自动更新到m_Th
(7)添加Button按钮ID号为IDC_THRESHOLD,标题为“阈值分割”点击它将对业已打开图片做 2值化分割对该
按钮添加消息响应OnThreshold:
//----------------------------------------------------------------------------
void COpenCV_Dlg1Dlg::OnThreshold
{
// TODO: Add your control notication handler code here
UpdateData(TRUE);
(m_cvImageNULL)
MessageBox("NO Source Image Found!","Warning");
{
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);
}
}
//
至此当点击“读图”按钮打开幅图片该图片将在PictureControl控件中显示;在EditControl控件
IDC_EDIT_TH中输入阈值并点击“阈值分割”按钮则对读入图像做 2值化处理处理结果在个新弹出窗口中显示
以上所编写是个试验性从中可以反应出用OpenCV编程般性步骤但该依然存在Bug:即显示在PictureControl控
件中图像不会重绘也就是说如果用另外个窗口遮挡PictureControl控件中图像当该窗口移去时被遮挡部分图像
便显示片空白此问题有待对进步查错
相关文章推荐
- 时间子系统16_soft lockup机制
- System Center Operations Manager 2012 SP1 处理“未监控”对象
- System Center Operations Manager 2012 SP1 处理“未监控”对象
- Redhat5安装psycopg2
- opengl屏幕像素与纹理像素不对应怎么办?
- linux访问windows共享文件夹
- Linux USB Configuration
- Linux Vi命令使用手册
- linux 删除自动备份的文件
- Linux内核中ioremap映射的透彻理解
- topcoder SRM 548 DIV2 500
- Linux系统中恢复删除文件的方法
- linux安装phpunit&phpdoc
- 在OpenCV中用cvCalibrateCamera2进行相机标定(附程序)
- 让CentOS启用EPEL的软件库
- apache-nutch-1.7-src.tar.gz 解压编译时无法从资源库下载jar包的问题
- AutoHotKey Script AHK脚本++Topre Realforce 104Pro十周年纪念版静电容键盘
- linxu shell 递归和while循环 的 factorial计算
- Linux Shell脚本攻略
- VirtualBox在CentOS中安装VBOXADDI…