MFC的对话框中用OPENCV添加图片
2016-06-30 09:56
323 查看
原文 http://blog.csdn.net/u012771236/article/details/29183719
主题 OpenCV MFC
转:http://www.tuicool.com/articles/iiMrAju
在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
第五步:
添加一个按钮,用来控制图片的显示,在按钮响应函数里面添加如下代码:
给对话框类添加showimage函数,函数实现如下(因为使用cv::Mat最终要转换为IplImage格式,所以这里只给出参数为cv::Mat 的函数):
注意,要将showimage作为对话框的成员函数
嘿嘿,很简单吧。
主题 OpenCV MFC
转:http://www.tuicool.com/articles/iiMrAju
在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
第五步:
添加一个按钮,用来控制图片的显示,在按钮响应函数里面添加如下代码:
void CShowImageDlg::OnBnClickedButtonShow() { // TODO: 在此添加控件通知处理程序代码 cv::Mat image = cv::imread("test.jpg"); if (!image.empty()) { showimage(image,IDC_SHOWIMAGE); } }
给对话框类添加showimage函数,函数实现如下(因为使用cv::Mat最终要转换为IplImage格式,所以这里只给出参数为cv::Mat 的函数):
/*================================================================ * * 函数原型:void showimage(cv::Mat& image,int IDC); * * 参 数:cv::Mat &image -- 要显示的图像 * int IDC -- 显示图像的图像控件的ID * * 功能描述: 将图像显示在对应的图像控件上 * * * 返 回 值:无 * * 抛出异常:无 * * 作 者:黄凯焕 * ================================================================*/ void CShowImageDlg::showimage(cv::Mat& image,int IDC) { CDC* pDC=GetDlgItem(IDC)->GetDC(); //根据ID获得窗口指针再获取与该窗口关联的上下文指针 HDC hDC=pDC->GetSafeHdc(); // 获取设备上下文句柄 CRect rect; GetDlgItem(IDC)->GetClientRect(&rect); //获取显示区 IplImage* img=&image.operator IplImage(); //将图像转换为IplImage格式,共用同一个内存(浅拷贝) CvvImage iimg; //创建一个CvvImage对象 iimg.CopyOf(img); iimg.DrawToHDC(hDC,&rect); ReleaseDC( pDC ); iimg.Destroy(); }
注意,要将showimage作为对话框的成员函数
嘿嘿,很简单吧。
相关文章推荐
- mybatis使用时org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):的错误
- Linux命令解析--echo
- 搭建rtmp直播流服务之3:java开发ffmpeg实现rtsp转rtmp并实现ffmpeg命令的接口化管理架构设计及代码实现
- 由于iptables导致nginx的499
- 前端架构
- HDU 4405 Aeroplane chess
- Linux字符设备驱动结构
- HDU 3853 LOOPS
- 【开源GPS追踪】 之 服务器端opengts安装
- 把 Nginx 创建为 Windows 的一个服务
- Nginx rtmp流媒体服务器搭建
- Tomcat7下配置SSI(解决中文乱码问题)
- red hat 6.5 Linux.6.5 安装yum
- Scrapy爬妹子图网站图片
- 借助RESTful API,用Excel开发网站,可用于多人在线实时编辑Excel,有实例下载
- cv::namedWindow, GLFWwindow以及其他程序嵌入到MFC中的教程
- 存储设备
- nginx利用第三方模块nginx_upstream_check_module来检查后端服务器的健康情况
- 浅谈web应用的负载均衡、集群、高可用(HA)解决方案
- 在Windows系统下,搭建最简单的nginx服务器