Hello Mat

 找回密码
 立即注册
查看: 5983|回复: 0

MFC下利用opencv处理图片

[复制链接]

11

主题

15

帖子

0

金钱

新手上路

Rank: 1

积分
15
发表于 2016-11-18 09:40:39 | 显示全部楼层 |阅读模式
本帖最后由 doublebin 于 2016-11-18 09:42 编辑

OpenCV是计算机视觉自由软件的宝库。但是,由于历史的原因它的软件主要采用类似DOS操作系统的命令行方式,使用十分不便,这也影响了它的推广。如果能将它应用到VC++文档结构中就好了。OpenCV程序在MFC中实现的方法通常是采用CvvImage类,这个类的成员函数DrawToHDC可将位图整体经缩放后显示到视图窗口中,解决了位图的显示问题,也就解决了OpenCV在MFC中的使用问题。
下面是编程的过程:
首先创建MFC基于对话框工程,添加Picture控件,和按钮控件。在opencv中找到CvvImage.h和CvvImage.cpp两个文件复制到创建的工程下,并把他们添加到工程中:
同样步骤添加CvvImage.cpp至源文件。要用到CvvImage类,所以先把CvvImage.h include到C×××Dlg.h中(×××表示创建基于对话框工程的名字),然后添加一个在图片控件上显示图片的函数如下:
  1. void CMFCVideoProcessingDlg::ShowImage(IplImage* img,UINT ID)
  2. {
  3.         
  4.         CDC *pDC = GetDlgItem(ID)->GetDC();
  5.         HDC hDC= pDC->GetSafeHdc();
  6.         CRect rect;
  7.         GetDlgItem(ID)->GetClientRect(&rect);
  8.         //rect=CRect(0,0,img->width,img->height);
  9.         CvvImage cimg;
  10.         cimg.CopyOf( img ); // 复制图片
  11.         cimg.DrawToHDC( hDC, &rect ); // 将图片绘制到显示控件的指定区域内
  12.         ReleaseDC( pDC );
  13. }
复制代码
注意该函数要在C×××Dlg.h中先声明,在C×××Dlg.cpp中定义。双击按钮,编辑按钮的代码
  1. void CMFCVideoProcessingDlg::OnBnClickedButtonOpenvideo1()
  2. {
  3.         // TODO: 在此添加控件通知处理程序代码
  4.         
  5.         Mat image1=imread(“E:\\pic.jpg”,1);//读入图片
  6. /************这里可以完成图像的各种处理方法*********/
  7.         IplImage Img1=image1;//Mat类型转换为IPLImage类型
  8.         ShowImage(&Img1,IDC_STATIC_SHOWVIDEO1);//显示图片,IDC_STATIC_SHOWVIDEO为Picture控件的ID

  9. }
复制代码
运行一下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Python|MATLAB|Halcom.cn

GMT+8, 2021-12-9 12:01 , Processed in 0.169166 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表