MFC+OPENCV实现JPEG图片的播放

用vc6.0进行开发真的有点蛋疼,在实现jpeg图片的播放,vc6.0的picture控件居然只支持位图>_<
开始想法是在程序中加一个编码过程,边读图边解码边显示,先将JPEG图片转化为位图再显示,但代价是在OPENCV中的自带的函数支持编解码,但要先写下来,所以读写再度时间较长无法满足实时性的要求;
第二种方法是用VTK中带的vtkJPEGReader类,在MFC中创建一个VTK的自定义控件,后读入显示,但结果是读入显示太慢,屏幕会一闪一闪的,速度太慢,查资料说要用双缓冲的技术;
后继续找资料,找到了cvvImage的类,这个类功能有点强;
Opencv vc6.0的配置直接网上搜吧,这里不在累述
建立一个界面,如图:

简单地包含一个Picture的控件和一个按钮控件
设置Picture控件的ID为:IDC_Picture
往Dlg.c文件中加入opencv的头文件:

#include "cv.h"
#include "highgui.h"

在Debug运行时还应加入highgui100.dll到目录下
接着对按钮继续消息相应函数的编写:

    IplImage *image=NULL; //原始图像
    char filename[128];
    for(int i=2;i<300;i++)
    {
        sprintf(filename,"5//%d.jpg",i);//""中间填写图片的路径
        //if(image)
        //  cvReleaseImage(&image);
        image = cvLoadImage(filename); //显示图片
        cvWaitKey(3);
        DrawPicToHDC(image, IDC_Picture);
        Sleep(30);
        cvReleaseImage(&image);
    }

在MFC的框架下cvWaitKey();这一函数无法延时;
用for(;;)循环也不能进行延时;
经测试Sleep()可以进行延时

void CPicturesDlg::DrawPicToHDC(IplImage *img, UINT ID)
{
    CDC *pDC = GetDlgItem(ID)->GetDC();
    HDC hDC= pDC->GetSafeHdc();
    CRect rect;
    GetDlgItem(ID)->GetClientRect(&rect);
//  cvWaitKey(30000000);
    CvvImage cimg;
    cimg.CopyOf(img);
    cimg.DrawToHDC(hDC,&rect);
    //cvWaitKey(30000000);
    ReleaseDC(pDC);
}

结果是应该能达到二十多帧,
结果:

双缓冲的技术可能马上就会用到>_<
除非有特殊要求,劲量还是不要用VC6.0

时间: 2024-12-08 19:51:13

MFC+OPENCV实现JPEG图片的播放的相关文章

如何把数据库中存放 BLOB 数据恢复成 JPEG 图片并显示在 MFC 对话框中呢?

问题描述 如何把数据库中存放 BLOB 数据恢复成 JPEG 图片并显示在 MFC 对话框中呢? 我把 JPEG 图像以 BLOB 类型存放在了 MYSQL 数据库中. 现在想把BLOB恢复成 JPEG 图像并显示在对话框中,该如何写代码呢? 解决方案 http://download.csdn.net/download/chenxh/145095 解决方案二: 如果我的回答帮助了您,请麻烦受累点下我回答右边的采纳 解决方案三: 二进制转换为图片文件 解决方案四: 使用ADO实现BLOB数据的存取

求助vs mfc opencv 做一个能显示摄像头的窗口

问题描述 求助vs mfc opencv 做一个能显示摄像头的窗口 各位大神好,我是一名即将大三的学生,老师要求我做一个窗口,能打开摄像头, 捕捉图片里的物体,并找到物体的中心点,然后传给机械手臂将物体抓起来, 现在一头雾水,请问还剩一周能完成吗?该从哪入手,各位大牛,走过路过给点小建议, 小弟感激不尽.. 解决方案 opencv2 在mfc窗口中显示关于cv::Mat 的解决方法OpenCv显示窗口移植到MFC 解决方案二: http://blog.csdn.net/liu1164316159

MFC 对话框Picture Control(图片控件)中静态和动态显示Bmp图片

        最近有同学问我如何实现MFC基于对话框在图片控件中加载图片?其实使用MFC显示图片的方法各种各样,但是还是有些同学不知道怎样显示.以前在<数字图像处理>课程中完成的软件都是基于单文档的程序,这里介绍两种在对话框picthre控件中显示BMP图片的最简单基础的方法.       ~~方法可能并不完美,高手忽略,但是提供一种能运行的方法,希望对刚接触这方面知识的同学有所帮助.可能你觉得文章过于简单或者有些过于详细叙述(点到即可我并不反对),但也为哪些入门同学想想,当初自己也是一头雾

如何显示数据库中以 OLE 对象方式存储的 JPEG 图片

对象|数据|数据库|显示 在 ASP 中, 我们经常需要在 Web 页面上显示以二进制方式保存在数据库中的图片. 一般的图片显示没有什么问题, 因为这方面的文章已经很多了, 我就不再阐述. 但有时候数据库中的图片是通过其他办公软件输入的, 或者通过其他方式, 比如在 Access 中直接添加. 这时, 图片以 OLE 对象的方式保存在数据库中, 在图片真实内容的前面, 还保存了一些其他的信息, 比如图片的路径和文件名,等等. 如果我们还用一般的输出方式的话, 就会出错, 导致图片不能显示. 幸好

如何使用PDF Image Extraction Wizard提取pdf文档中jpeg图片

如何将PDF中的jpeg和bmp图片单独的批量提取出来?很多PDF中的图片资源都是很有使用价值的,可以作为其他方面的素材.小编教你使用PDF Image Extraction Wizard提取pdf文档中jpeg图片~ 工欲善其事必先利其器,pdf image extraction wizard下载 因为是绿色版软件的缘故所以无需安装就可以使用了,打开这个可执行文件EXE 现在进入到软件主界面了,点击"next" 找到要处理pdf文件,选号输出目录,推荐选中添加编号功能,然后next下

JPEG 图片格式我们要用到 2030 年

Laptop网站近日发表了一篇名为<15个我们将用到2030年的科技>,JPEG图片格式赫然在列. Laptop 认为,虽然现在带宽.处理能力和存储容量都在不断提高,不过我们仍会坚持使用那些从90年代开始就在使用的文件格式,因为它们是标准.尽管高端数码单反相 机可以提供无压缩的RAW文件,但多数设备还是拍摄JPEG格式,因为所有外围设备都支持JPEG.到了2030年,我们的后代还会继续拍摄和观看 JPEG照片,浏览器还是会支持JPEG图片,我们也会继续向社交网络上传JPEG文件. 摄影师对于J

c++-MFC对话框添加背景图片的问题

问题描述 MFC对话框添加背景图片的问题 按照大家的帮助,我在OnPaint函数中添加如下代码:void CsaoleiDlg::OnPaint(){ if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND reinterpret_cast<WPARAM>(dc.GetSafeHdc()) 0); // 使图标在工作区矩形中居中 int cxIcon = GetSystemMetrics(

如何将jpeg图片组写入m-jpeg编码的avi

问题描述 如何将jpeg图片组写入m-jpeg编码的avi 我把avi的封装写好了,并在movi的chunk处插入了多帧jpeg图片组,但是出来的avi文件为什么只有1秒而且黑屏没有图像,郁闷 下面是我写入avi的字节数据,我在#后面插入的jpeg图片组, 0x52 0x49 0x46 0x46 0xff 0xff 0xff 0xff0x41 0x56 0x49 0x20 0x4c 0x49 0x53 0x540xff 0xff 0xff 0xff 0x68 0x64 0x72 0x6c0x61

安卓开发-自定义下拉刷新和图片轮播放到同一个布局里

问题描述 自定义下拉刷新和图片轮播放到同一个布局里 自定义下拉刷新和图片轮播放到同一个布局view_header里,直接加载这个布局,可以加载出来么? 解决方案 不清楚,感觉不可以.