OpenCV和MFC结合编程例子新_第1页
OpenCV和MFC结合编程例子新_第2页
OpenCV和MFC结合编程例子新_第3页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、下面是一个简洁的应用opencv和mfc 结合编程的例子。(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_d

2、lg1dlg ()中将其初始化为 null , 即添加“m_cvimage=null ;语句。(4 )opencv 有现成的函数cvshowimage ()来显示图像,但用该函数显示图像是却是另外开拓了一个弹出窗口并在其中显示,为了在我们建立的 picture 控件中显示图像,需在 copencv_dlg1dlg 类中添加成员函数函数类型:void函数名称drawpictohdc(iplimage *img, uint id) 属性设置为publicdrawpictohdc ()函数代码为:/-void copencv_dlg1dlg:drawpictohdc(iplimage *img, u

3、int id)cdc *pdc = getdlgitem(id)->getdc();(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_overwr

4、iteprompt,“原始图像(*.bmp)|*.bmp|全部文件(*.*)|*.*|“,null);if (fdlg.domodal() = true)open_filename = fdlg.getfilename();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(&

5、amp;rect);/以下是把 iplimage * 转到能够在 view 里面画的关键cvvimage cimg;cimg.copyof(img); cimg.drawtohdc(hdc,&rect); releasedc(pdc);/=if(m_cvimage) cvreleaseimage(&m_cvimage);m_cvimage = cvloadimage(open_filename,1);if (m_cvimage=0) messagebox(“reading failed“); elsedrawpictohdc(m_cvimage, idc_show_window

6、);/=至此,运行程序,当点击“读图”按钮时,会弹出对话框,提示用户选择需要读入的图片,“确定”后程序便会在 picture 控件中将图片显示出来。(6) 添加 edit 控件,id 号为 idc_edit_th,应用向导工具 mfc classwizard 给该 id 添加 int 型的成员变量 m_th.通过 edit 控件 idc_edit_th,用户可以输入图像分割阈值,程序会将其自动更新到 m_th.vlaue,int,最大最小 1,255(7) 添加 button 按钮,id 号为 idc_threshold,标题为“阈值分割”,点击它将对业已打开的图片做二值化分割。对该按钮添加消

7、息响应函数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“); elseiplimage* dst=cvcreateimage( cvsize(m_cvimage->width,m_cvimage->height), m_cvimage-&

8、gt;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);drawpictohdc(dst, idc_show_window);/cvnamedwindow(“threshold“); /设置窗口名称/cvshowimage(“threshold“,dst); /显示图

9、片/cvwaitkey(0);/=至此,当点击“读图”按钮打开一幅图片,该图片将在picture 控件中显示;在edit 控件idc_edit_th 中输入阈值,并点击“阈值分割”按钮,则对读入的图像做二值化处理,处理结果在一个新弹出窗口中显示。% 边缘提取laplace 算子(1)添加 button 按钮,id 号为 idc_laplace,标题为“laplace 算子”。对该按钮添加消息响应函数 onlaplace():程序:void copencv_dlg1dlg: onlaplace ()/ todo: add your control notification handler cod

10、e here updatedata(true);%更新if (m_cvimage=null)%假如为空就提示messagebox(“no source image found!“,“warning“); elseiplimage*laplace=cvcreateimage(cvgetsize(m_cvimage),ipl_depth_16s,3); cvlaplace(m_cvimage,laplace,7);/原型:void cvlaplace( const cvarr* src, cvarr* dst, int aperture_size);drawpictohdc(laplace, id

11、c_show_window);/cvnamedwindow(“laplace“); /设置窗口名称/cvshowimage(“laplace“,dst); /显示图片/cvwaitkey(0);canny 算子(6)添加 edit 控件,id 号为 idc_edit_th1,应用向导工具 mfc classwizard 给该id 添加 int 型的成员变量 m_th1.(7)添加 edit 控件,id 号为 idc_edit_th2,应用向导工具 mfc classwizard 给该id 添加 int 型的成员变量 m_th2.(8)添加 button 按钮,id 号为 idc_canny,标

12、题为“canny 算子”。对该按钮添加消息响应函数 oncanny():/-void copencv_dlg1dlg:oncanny()/ todo: add your control notification handler code here updatedata(true);%更新if (m_cvimage=null)%假如为空就提示messagebox(“no source image found!“,“warning“); else灰度化处理iplimage * image_gray= cvcreateimage(cvgetsize(m_cvimage), ipl_depth_8u,

13、1); cvcvtcolor(m_cvimage,image_gray,cv_bgr2gray);iplimage* canny=cvcreateimage(cvgetsize(image_gray),ipl_depth_8u,1); cvcanny(image_gray, canny, m_th1, m_th2, 3);/原型:void cvcanny( const cvarr* image, cvarr* edges, double threshold1, double threshold2, int aperture_size );drawpictohdc(canny, idc_show

14、_window);/=% harris 算子(8)添加button 按钮,id 号为 idc_harris,标题为“harris 算子”。对该按钮添加消息响应函数 onharris():/-void copencv_dlg1dlg:onharris()/ todo: add your control notification handler code here updatedata(true);%更新if (m_cvimage=null)%假如为空就提示messagebox(“no source image found!“,“warning“); else至此,当点击“读图”按钮打开一幅图片,

15、该图片将在picture 控件中显示;在edit 控件idc_edit_th 中输入阈值,并点击“阈值分割”按钮,则对读入的图像做二值化处理,处理结果在一个新弹出窗口中显示。灰度化处理iplimage* image_gray= cvcreateimage(cvgetsize(m_cvimage), ipl_depth_8u,1);cvcvtcolor(m_cvimage,image_gray,cv_bgr2gray);iplimage*dst= cvcreateimage(cvgetsize(image_gray), ipl_depth_8u,1);cvconvertimage(img,dst,cv_cvtimg_flip);iplimage* harris=cvcreateimage(cvgetsize(image_gray),ipl_depth_32f,1); cvcornerharris(image_gray, harris, 3,5,0.04);/原型:void cvcanny( const cvarr* image, cvarr* edg

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论