MFC中用OPENCV如何将图片显示在指定位置?

转自http://blog.csdn.net/u012771236/article/details/29183719?utm_source=tuicool&utm_medium=referral

在opencv在开发过程中,我想最频繁的操作(之一)莫过于显示图片了。

学过OpenCV的同学都知道,调用cv::imshow()(或者C版本的ShowImage())可以轻而易举的将图片显示出来。

但是,它会创建一个不这么协调的对话框来显示这个图片,那么在MFC中我们如何让图片显示在指定的位置上呢?

先给个结果图(我使用的是VS2010+OpenCV2.4.8):


第一步:

创建一个基于MFC的基本对话框框架了、配置OpenCV环境


第二步:(如果是使用2.2版本以下的跳过)

我们要使用一个非常重要的类CVVImage(注意不是w,而是两个V),而该类定义在CVVImage定义在CvvImage.h文件上,不过OpenCV2.2以后的版本把它给抛弃了,所以为了能使用该类,我们找到包含该类的文件CvvImage.h和CvvImage.cpp将它们添加到你的工程里面(这就是开源的其中一个好处)


第三步:

在你的主对话框上面添加一个图片控件(Picture Control),然后可以修改图片的ID为IDC_SHOWIMAGE


第四步:

在工程目录下添加一张图片,命名为:test.jpg


第五步:

添加一个按钮,用来控制图片的显示,在按钮响应函数里面添加如下代码:

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. void CShowImageDlg::OnBnClickedButtonShow()  
  2. {  
  3.     // TODO: 在此添加控件通知处理程序代码  
  4.     cv::Mat image = cv::imread("test.jpg");  
  5.     if (!image.empty())  
  6.     {  
  7.         showimage(image,IDC_SHOWIMAGE);  
  8.     }  
  9. }  
给对话框类添加showimage函数,函数实现如下(因为使用cv::Mat最终要转换为IplImage格式,所以这里只给出参数为cv::Mat 的函数):

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. /*================================================================  
  2.  *  
  3.  * 函数原型:void showimage(cv::Mat& image,int IDC);  
  4.  *  
  5.  * 参    数:cv::Mat &image -- 要显示的图像 
  6.  *           int IDC        -- 显示图像的图像控件的ID 
  7.  *  
  8.  * 功能描述: 将图像显示在对应的图像控件上 
  9.  *   
  10.  *  
  11.  * 返 回 值:无 
  12.  *  
  13.  * 抛出异常:无 
  14.  *  
  15.  * 作    者:黄凯焕 
  16.  *  
  17.  ================================================================*/    
  18. void CShowImageDlg::showimage(cv::Mat& image,int IDC)  
  19. {  
  20.     CDC* pDC=GetDlgItem(IDC)->GetDC();           //根据ID获得窗口指针再获取与该窗口关联的上下文指针  
  21.     HDC hDC=pDC->GetSafeHdc();                   // 获取设备上下文句柄  
  22.     CRect rect;  
  23.     GetDlgItem(IDC)->GetClientRect(&rect);       //获取显示区  
  24.   
  25.     IplImage* img=&image.operator IplImage();   //将图像转换为IplImage格式,共用同一个内存(浅拷贝)  
  26.     CvvImage iimg;                              //创建一个CvvImage对象  
  27.     iimg.CopyOf(img);  
  28.     iimg.DrawToHDC(hDC,&rect);  
  29.     ReleaseDC( pDC );  
  30.     iimg.Destroy();  
  31. }  
  32. 我的注释:这篇教程适实现了按下一个按钮就在图片控件中显示一张图片的功能,如何实现按下open按钮就打开选择图片的框,选择完毕后显示图片见我的分享http://download.csdn.net/detail/xbcreal/9533480
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值