doublebin 发表于 2016-11-18 09:40:39

MFC下利用opencv处理图片

本帖最后由 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中(×××表示创建基于对话框工程的名字),然后添加一个在图片控件上显示图片的函数如下:void CMFCVideoProcessingDlg::ShowImage(IplImage* img,UINT ID)
{
      
      CDC *pDC = GetDlgItem(ID)->GetDC();
      HDC hDC= pDC->GetSafeHdc();
      CRect rect;
      GetDlgItem(ID)->GetClientRect(&rect);
      //rect=CRect(0,0,img->width,img->height);
      CvvImage cimg;
      cimg.CopyOf( img ); // 复制图片
      cimg.DrawToHDC( hDC, &rect ); // 将图片绘制到显示控件的指定区域内
      ReleaseDC( pDC );
}注意该函数要在C×××Dlg.h中先声明,在C×××Dlg.cpp中定义。双击按钮,编辑按钮的代码
void CMFCVideoProcessingDlg::OnBnClickedButtonOpenvideo1()
{
      // TODO: 在此添加控件通知处理程序代码
      
      Mat image1=imread(“E:\\pic.jpg”,1);//读入图片
/************这里可以完成图像的各种处理方法*********/
      IplImage Img1=image1;//Mat类型转换为IPLImage类型
      ShowImage(&Img1,IDC_STATIC_SHOWVIDEO1);//显示图片,IDC_STATIC_SHOWVIDEO为Picture控件的ID

}运行一下:
页: [1]
查看完整版本: MFC下利用opencv处理图片