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 视频图像显示相关推荐

  1. OpenCV+MFC显示图像

    OpenCV+MFC显示图像 .h中代码 /****************************************************************************** ...

  2. vs中c语言图形显示出来,VS2010+Opencv+MFC读取图像和视频显示在Picture控件

    VS2010+Opencv+MFC读取图像和视频显示在Picture控件,供大家参考,具体内容如下 1.新建MFC对话框应用程序. 其余选项默认,单击完成,创建出对话框应用程序.删掉原来自带的一些控件 ...

  3. 通过OpenCV对视频进行绿幕抠图

    通过OpenCV对视频进行绿幕抠图 效果 代码 1.打开视频素材 2.保存视频路径及格式设置 3.读取一帧视频 4.寻找绿幕背景 5.融合 6.代码执行效果 效果 今天跟大家分享的是最近比较受大家喜欢 ...

  4. OpenCV读写视频文件解析(二)

    OpenCV读写视频文件解析(二) VideoCapture::set 设置视频捕获中的属性. C++: bool VideoCapture::set(int propId, double value ...

  5. OpenCV读写视频文件解析

    OpenCV读写视频文件解析 一.视频读写类 视频处理的是运动图像,而不是静止图像.视频资源可以是一个专用摄像机.网络摄像头.视频文件或图像文件序列. 在OpenCV 中,VideoCapture 类 ...

  6. 解决Python OpenCV 读取视频并抽帧出现error while decoding的问题

    解决Python OpenCV 读取视频抽帧出现error while decoding的问题 1. 问题 2. 解决 3. 源代码 参考 1. 问题 读取H264视频,抽帧视频并保存,报错如下: [ ...

  7. 使用Python,OpenCV读取视频的每一帧,修改后写入视频

    使用OpenCV 3将视频写入文件,并保存在自己的磁盘上 尝试支持avi.MP4文件格式的写入,俩种文件的编码格式不一致 codec: MJPG output: example.avi codec: ...

  8. 使用Python,OpenCV在视频中进行实时条形码检测

    使用Python,OpenCV在视频中进行实时条形码检测 1. 步骤 2. 适用场景及优化 3. 总结 4. 源码 参考 上一篇博客介绍了如何检测和查找图像中的条形码.这篇博客将进行一些优化以检测实时 ...

  9. 用C++ 和OpenCV 实现视频目标检测(YOLOv4模型)

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 据说,现在很多小区都上线了AI抓拍高空抛物的黑科技,可以自动分析抛物 ...

最新文章

  1. android设置tls版本,Android O移除HttpsURLConnection中不安全的TLS版本回退
  2. python爬取下拉列表数据_Python怎么爬取下拉式的网页?
  3. Tensorflow一些常用基本概念与函数(1)
  4. mysql 索引生命周期_MYSQL 索引(一)--- 简介
  5. 【经验】对“面试造火箭,入职拧螺钉”的看法
  6. vue中路径带# vs 不带#
  7. mac安装go语言环境
  8. 吴恩达深度学习 —— 2.6 更多导数的例子
  9. ALEIS,啊,累死
  10. Android ActionBar示例教程
  11. 计算机丢失MSVCR71.dll处理方法
  12. CAN:CAN矩阵、CAN网络、DBC、MDF关系
  13. S32K FTM(FlexTimer module)详解
  14. StatsD,collected,fluentd和其他守护程序
  15. 焊接知识与技能(嵌入式硬件篇)
  16. 干货!5招搞定问卷调查差异化分析
  17. Android open failed: ENOENT (No such file or directory)以及open failed: EISDIR (Is a directory)
  18. matlab傅里叶级数展开
  19. 学计算机swot分析怎么写,计算机专业学生个人SWOT分析示例
  20. CF346B Lucky Common Subsequence 题解

热门文章

  1. 组装一台台式计算机的流程,如何组装电脑?组装电脑的操作流程!
  2. 微信小程序 - 获取当前日期时间(函数封装)
  3. SP3232串口上电瞬间发乱码问题
  4. 2023年,把“软件评测师”考起来吧~
  5. Multi class ovr or ovo
  6. 《校园宿舍管理系统》之数据库程序设计/GUI/java/eclipse/MySQL/JDBC
  7. python杨辉三角输出指定行_使用python打印十行杨辉三角过程详解
  8. 工具及方法 - 查询IP信息
  9. 火遍全世界的网红美女李子柒一年能赚多少钱,数据量化给你看,连中央媒体都为她打call...
  10. 上海亚商投顾:两市震荡引分化 汽车产业链获青睐