opencv + MFC 视频图像显示
1.读取并显示图像
显示图像或视频使用VC中的Picture控件,用到VC图形设备接口的设备上下文(CDC类)。比如打开显示这样一个图片lean.jpg
先进行一些初始化工作,代码如下:
1 // DemoDlg.h 2 #include <highgui.h> 3 4 //在CDemoDlg类定义中加入如下几行 5 private: 6 CRect rect; 7 CStatic* pStc; //标识图像显示的Picture控件 8 CDC* pDC; //视频显示控件设备上下文 9 HDC hDC; //视频显示控件设备句柄 10 CvCapture* capture; //视频获取结构 11 12 //DemoDlg.cpp 13 #include <cv.h> 14 #include <highgui.h> 15 #include <cvaux.h> 16 #include <ml.h> 17 18 //在CDemoDlg构造函数内添加以下几行,指针初始化 19 pStc=NULL; 20 pDC=NULL; 21 capture=NULL; 22 23 //在CDemoDlg类的OnInitDialog()中添加如下几行,进行初始化 24 BOOL CFaceDlg::OnInitDialog() 25 { 26 //框架生成代码....... 27 28 pStc=(CStatic *)GetDlgItem(IDC_VIEW);//IDC_VIEW为Picture控件ID 29 pStc->GetClientRect(&rect);//将CWind类客户区的坐标点传给矩形 30 pDC=pStc->GetDC(); //得到Picture控件设备上下文 31 hDC=pDC->GetSafeHdc(); //得到控件设备上下文的句柄 32 33 return TRUE; 34 }
如上就将Picture控件的设备上下文句柄与图片/视频显示的矩形区域联系起来。
下面显示图片,在对话框上添加一个打开按钮,点击该按钮触发读取显示图像的事件,事件响应如下:
1 void CDemoDlg::OnOpen() 2 { 3 IplImage * img=cvLoadImage("lena.jpg");//load image from file 4 CvvImage cvvImg; //CvvImage类 5 cvvImg.CopyOf(img);//复制图像到当前的CvvImage对象中 6 cvvImg.DrawToHDC(hDC,&rect); //绘制图像的ROI区域到DC的rect 7 }
2.读取并显示视频
因为视频时一帧一帧的图像,因此显示视频可以理解为间断地读取并显示不同帧的图像。这里有一个要点,为了合理利用资源,尽量不要使用一个死循环一直读取视频中的帧数据,应该根据视频的帧率设置合适的时钟,定时地对视频中的帧图像进行读取显示。因为帧率通常很低,所以显示的每一帧图像看起来就会使连续的。
对于视频(视频文件/摄像头)的操作,OpenCV中文网站的参考手册上给你详细的用法,详见http://www.opencv.org.cn/index.php/HighGUI%E8%A7%86%E9%A2%91%E8%AF%BB%E5%86%99%E5%87%BD%E6%95%B0
这里给出视频文件的读取与现实(因为没摄像头,摄像头的还没有测试)。
初始化工作同上面的图像读取显示一样,所不同的是CDemoDlg::OnOpen()事件响应函数中的代码有区别,如下
1 void CDemoDlg::OnOpen() 2 { 3 if (!capture) 4 { 5 capture=cvCaptureFromAVI("D://OtherUse//11.avi"); //初始化一个视频文件捕捉器 6 } 7 if(!capture) 8 { 9 AfxMessageBox("无法获得摄像头");return; 10 } 11 SetTimer(1,25,NULL); //定时器,定时时间和帧率一致 12 }
然后设置时间响应,定时到达后,处理OnTimer(UINT nIDEvent)事件,视频显示在这里面完成。
1 void CDemoDlg::OnTimer(UINT nIDEvent) 2 { 3 // TODO: Add your message handler code here and/or call default 4 if(1==nIDEvent) 5 { 6 IplImage* img=0; 7 img=cvQueryFrame(capture); //从摄像头或者文件中抓取并返回一帧 8 //cvGrabFrame( capture ); //从摄像头或者视频文件中抓取帧 9 //img=cvRetrieveFrame(capture); //取回由函数cvGrabFrame抓取的图像 10 CvvImage m_CvvImage; 11 m_CvvImage.CopyOf(img,1); //复制该帧图像 12 m_CvvImage.DrawToHDC(hDC, &rect); //显示到设备的矩形框内 13 } 14 CDialog::OnTimer(nIDEvent);
opencv + MFC 视频图像显示相关推荐
- OpenCV+MFC显示图像
OpenCV+MFC显示图像 .h中代码 /****************************************************************************** ...
- vs中c语言图形显示出来,VS2010+Opencv+MFC读取图像和视频显示在Picture控件
VS2010+Opencv+MFC读取图像和视频显示在Picture控件,供大家参考,具体内容如下 1.新建MFC对话框应用程序. 其余选项默认,单击完成,创建出对话框应用程序.删掉原来自带的一些控件 ...
- 通过OpenCV对视频进行绿幕抠图
通过OpenCV对视频进行绿幕抠图 效果 代码 1.打开视频素材 2.保存视频路径及格式设置 3.读取一帧视频 4.寻找绿幕背景 5.融合 6.代码执行效果 效果 今天跟大家分享的是最近比较受大家喜欢 ...
- OpenCV读写视频文件解析(二)
OpenCV读写视频文件解析(二) VideoCapture::set 设置视频捕获中的属性. C++: bool VideoCapture::set(int propId, double value ...
- OpenCV读写视频文件解析
OpenCV读写视频文件解析 一.视频读写类 视频处理的是运动图像,而不是静止图像.视频资源可以是一个专用摄像机.网络摄像头.视频文件或图像文件序列. 在OpenCV 中,VideoCapture 类 ...
- 解决Python OpenCV 读取视频并抽帧出现error while decoding的问题
解决Python OpenCV 读取视频抽帧出现error while decoding的问题 1. 问题 2. 解决 3. 源代码 参考 1. 问题 读取H264视频,抽帧视频并保存,报错如下: [ ...
- 使用Python,OpenCV读取视频的每一帧,修改后写入视频
使用OpenCV 3将视频写入文件,并保存在自己的磁盘上 尝试支持avi.MP4文件格式的写入,俩种文件的编码格式不一致 codec: MJPG output: example.avi codec: ...
- 使用Python,OpenCV在视频中进行实时条形码检测
使用Python,OpenCV在视频中进行实时条形码检测 1. 步骤 2. 适用场景及优化 3. 总结 4. 源码 参考 上一篇博客介绍了如何检测和查找图像中的条形码.这篇博客将进行一些优化以检测实时 ...
- 用C++ 和OpenCV 实现视频目标检测(YOLOv4模型)
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 据说,现在很多小区都上线了AI抓拍高空抛物的黑科技,可以自动分析抛物 ...
最新文章
- android设置tls版本,Android O移除HttpsURLConnection中不安全的TLS版本回退
- python爬取下拉列表数据_Python怎么爬取下拉式的网页?
- Tensorflow一些常用基本概念与函数(1)
- mysql 索引生命周期_MYSQL 索引(一)--- 简介
- 【经验】对“面试造火箭,入职拧螺钉”的看法
- vue中路径带# vs 不带#
- mac安装go语言环境
- 吴恩达深度学习 —— 2.6 更多导数的例子
- ALEIS,啊,累死
- Android ActionBar示例教程
- 计算机丢失MSVCR71.dll处理方法
- CAN:CAN矩阵、CAN网络、DBC、MDF关系
- S32K FTM(FlexTimer module)详解
- StatsD,collected,fluentd和其他守护程序
- 焊接知识与技能(嵌入式硬件篇)
- 干货!5招搞定问卷调查差异化分析
- Android open failed: ENOENT (No such file or directory)以及open failed: EISDIR (Is a directory)
- matlab傅里叶级数展开
- 学计算机swot分析怎么写,计算机专业学生个人SWOT分析示例
- CF346B Lucky Common Subsequence 题解
热门文章
- 组装一台台式计算机的流程,如何组装电脑?组装电脑的操作流程!
- 微信小程序 - 获取当前日期时间(函数封装)
- SP3232串口上电瞬间发乱码问题
- 2023年,把“软件评测师”考起来吧~
- Multi class ovr or ovo
- 《校园宿舍管理系统》之数据库程序设计/GUI/java/eclipse/MySQL/JDBC
- python杨辉三角输出指定行_使用python打印十行杨辉三角过程详解
- 工具及方法 - 查询IP信息
- 火遍全世界的网红美女李子柒一年能赚多少钱,数据量化给你看,连中央媒体都为她打call...
- 上海亚商投顾:两市震荡引分化 汽车产业链获青睐