已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
下面是一个简单的应用 OpenCV 和 MFC 结合编程的例子。 (1)建立一个基于 Dialog 的 MFC 工程 OpenCV_Dlg1,在头文件 OpenCV_Dlg1Dlg.h 中加入“#include ”,“#include ”宏命令语 句。 (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( /以下是把 IplImage * 转到能够在 view 里面画的关键 CvvImage cimg; cimg.CopyOf(img); cimg.DrawToHDC(hDC, 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 = 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.vlaue,int,最大最小 1,255 (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); DrawPicToHDC(dst, IDC_SHOW_WINDOW); /cvNamedWindow(“Threshold“); /设置窗口名称 /cvShowImage(“Threshold“,dst); /显示图片 /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 code here UpdateData(TRUE); %更新 if (m_cvImage=NULL) %如果为空就提醒 MessageBox(“NO Source Image Found!“,“Warning“); else IplImage*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, IDC_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,标题为“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,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 thr eshold2, int aperture_size ); DrawPicToHDC(Canny, IDC_SHOW_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 灰度化处理 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* edges, double threshold1, double thr eshold2, int aperture_size ); DrawPicToHDC(Harris, IDC_SHOW_WINDOW); /= 至此,当点击“读图”按钮打
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年药品经营和使用质量监督管理办法考试试卷含答案
- 电焊网片案例介绍
- 教育培训线上线下教学资源整合
- 强直性脊柱炎症状解析及护理指南培训
- 老年冠心病病人健康宣教
- 肿瘤科常见疾病症状及护理要点
- 手游电竞策划岗位前瞻行业动态与岗位前景分析
- 发电机维修技师职业生涯发展规划
- 盐焗鸡销售合同范本
- 种植劳务分包协议书
- 管道打压基础知识培训课件
- 人教版高中生物选择性必修1《稳态与调节》必背知识考点提纲填空练习版(含答案)
- 劳动争议调解员培训课件
- 汕头村民住宅管理办法
- 油田开发项目数字化方案(模板范文)
- 面粉厂生产线技术改造项目建议书可研报告
- 债权清收委托协议书
- GB/T 45595-2025离心式制冷剂压缩机
- 2025年杀菌剂混剂项目可行性研究方案
- 二零二五年度联合办学协议书-体育教育专业合作发展框架协议
- 门窗订购合同范本
评论
0/150
提交评论