`
akiraray
  • 浏览: 90241 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

OpenCV学习备忘 Vol .2 播放视频文件

阅读更多

 

作者:Akira.Panda

参考书籍及资料

  • OpenCV中文社区
  • 《学习OpenCV》

内容提要

  • 播放视频文件
  • 使用播放控制条,控制播放进度

 

准备工作

准备一段视频格式最好为avi或者mp4格式的,不要RMVB格式。

实验1 播放视频,按ESC键退出

代码

 

/*
* main.cpp
*
*  Created on: 2011-10-26
*      Author: Akira.Pan
*/
#include "highgui.h"
int main(int argc, char ** argv) {
    char* fileName = "E:\\Media\\20110606(001).mp4";
    char* windowTitle = "Vedio";
    int ESC_KEY = 27;
    cvNamedWindow(windowTitle, CV_WINDOW_AUTOSIZE);
    CvCapture *capture = cvCreateFileCapture(fileName);
    IplImage* frame;
    while (1) {
        frame = cvQueryFrame(capture);
        if (!frame) {
            break;
        }
        cvShowImage(windowTitle, frame);
        int c = cvWaitKey(33);
        if (c == ESC_KEY) {
            break;
        }
    }
    cvReleaseCapture(&capture);
    cvDestroyWindow(windowTitle);
    return 0;
}

 

 

代码解析

重要函数

  • CvCapture * cvCreateFileCapture(char* filename ) 从指定路径中读取视频文件,相对的还有从设备中(设摄像头)读出。
  • IplImage* cvQueryFrame( CvCapture* capture ) 获取下一帧图片,如果下一帧无图片为空则表示视频结束
  • void cvReleaseCapture( CvCapture** capture ) 释放掉一段Capture资源

 

实验2 播放视频,按ESC键退出,上面有播放进度控制条

代码

 

/*
 * main.cpp
 *
 *  Created on: 2011-10-26
 *      Author: Akira.Pan
 */
#include "highgui.h"
int gSliderPos = 0;
CvCapture* gCapture = NULL;
void showPosFrame(int pos) {
    /*show the pos of frame*/
    cvSetCaptureProperty(gCapture, CV_CAP_PROP_POS_FRAMES, pos);
}
int main(int argc, char ** argv) {
    char* fileName = "E:\\Media\\20110606(001).mp4";
    char* windowTitle = "Vedio";
    int ESC_KEY = 27;
    cvNamedWindow(windowTitle, CV_WINDOW_AUTOSIZE);
    CvCapture *capture = cvCreateFileCapture(fileName);
    gCapture = capture;
    int frameCount = (int) cvGetCaptureProperty(capture,
            CV_CAP_PROP_FRAME_COUNT);
    if (frameCount != 0) {
        cvCreateTrackbar("Track Bar", windowTitle, &gSliderPos, frameCount,
                showPosFrame);
    }
    IplImage* frame;
    while (1) {
        frame = cvQueryFrame(capture);
        if (!frame) {
            break;
        }
        cvShowImage(windowTitle, frame);
        gSliderPos++;
        if (gSliderPos % 150 == 0)
            cvSetTrackbarPos("Track Bar", windowTitle, gSliderPos);
        int c = cvWaitKey(50);
        if (c == ESC_KEY) {
            break;
        }
    }
    cvReleaseCapture(&capture);
    cvDestroyWindow(windowTitle);
    return 0;
}

 

 

代码解析

重要函数

  • int    cvSetCaptureProperty( CvCapture* capture, int property_id, double value ); 设置Capture的一项属性,我们这里设置的当前的Frame的位置。使Capture获取的下一帧的位置变为Frame的Pos位置;
  • double cvGetCaptureProperty( CvCapture* capture, int property_id );获取Capture一项属性,这里获取的是CV_CAP_PROP_FRAME_COUNT即所有Frame的总数;
  • int cvCreateTrackbar( const char* trackbar_name, const char* window_name,
                                 int* value, int count, CvTrackbarCallback on_change) 不要被函数签名吓住了其实这个函数也很简单。trackbar_name代表trackbar空间的标题名,和window一样也是一个key值,window_name表示是依附在哪个window上的,value代表当前控制条的位置计数,注意这个是一个引用传递值,随着拖动trackbar这个值都会发生变化;count表示最大的数值;on_change是一个回调函数即当用户拖动控制条的时候触发的一个函数。

一些说明

  •  trackbar和capture的机制


用户拖动了TrackBar之后,触发了on_click时间,程序执行回调函数showPosFrame(int);而该函数的主要作用是指定capture的播放的frame的位置。通过调整其播放帧数调整播放的进度。

 

  • 大小: 67.5 KB
分享到:
评论
1 楼 Julian122112 2014-07-25  
请教楼主,opencv直接打开.MP4格式的视频可以么?怎样将视频保存为.MP4格式呢~

相关推荐

    opencv-java480.dll windows 64 opencv-java480.jar下载

    OpenCV(开源计算机视觉库)是一个强大的跨平台计算机视觉库,它包含了大量的图像处理和计算机视觉算法,广泛应用于机器学习、图像分析、人脸识别等领域。在Java环境下,OpenCV提供了`opencv_java`接口,使得Java...

    opencv-460.jar及opencv-java460.dll

    2. **导入库**:在Java代码中,通过`import org.opencv.core.*;`等语句导入OpenCV的相关类。 3. **初始化OpenCV**:在程序开始时,调用`System.loadLibrary(Core.NATIVE_LIBRARY_NAME);`加载OpenCV库。 4. **基本...

    opencv_world310.lib文件

    例如,`#include <opencv2/opencv.hpp>` 将导入所有必要的头文件,然后在链接阶段指定"opencv_world310.lib"(或"opencv_world310d.lib")来完成编译。 5. **编译和链接**: 使用Visual Studio或其他C++编译器时,...

    opencv_world320.dll|opencv320.rar

    OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,它包含了大量的图像处理和计算机视觉的算法,广泛应用于图像分析、识别、机器学习等领域。在给定的压缩包文件中,`opencv_world320.dll`是...

    opencv_world341.lib

    装好opencv一直报下面这个错误,额外下了,希望对大家有用 LINK : fatal error LNK1181: 无法打开输入文件“opencv_world341.lib” 0

    opencv3.1.0_32位版本VS2015编译含lib文件x86

    opencv 3.1.0的32位版本 opencv 3.1.0的X86版本 含bin文件和lib文件 ...以及opencv_calib3d310.dll,opencv_core310.dll,opencv_ffmpeg310.dll,opencv_flann310.dll,opencv_photo310.dll等20个dll文件

    基于python语言,学习Opencv的简单例子.zip

    学习Opencv的简单例子.zip基于python语言,学习Opencv的简单例子.zip基于python语言,学习Opencv的简单例子.zip基于python语言,学习Opencv的简单例子.zip基于python语言,学习Opencv的简单例子.zip基于python语言,...

    opencv_core2413.dll

    opencv_core2413.dll C#编程 。。。。。。。。。。。。。。。。。。。。。。。。。。

    opencv缺少的DLL.zip

    OpenCV是一个强大的计算机视觉库,广泛应用于图像处理、机器学习和人工智能等领域。为了在Windows Server 2008上顺利运行OpenCV程序,你需要确保系统中安装了所有必需的依赖项。 首先,OpenCV库本身是由多个DLL文件...

    window opencv_java320.dll

    window平台的 opencv_java320.dll 编译好的,放在java bin目录下即可

    opencv_java453.dll

    opencv官方的本地库,用在windows平台

    opencv-python3.4.1.15.zip

    OpenCV,全称Open Source Computer Vision Library,是一个开源的计算机视觉库,它包含了众多图像处理和计算机视觉的算法,广泛应用于图像分析、机器学习以及人工智能等领域。在Python编程语言中,OpenCV提供了一个...

    【OpenCV】opencv_world455_x86_vc17 库文件(含 .lib / .dll 及其 debug 版本)

    【opencv_world455_x86_vc17 库文件】 ...2. 动态链接库(opencv_videoio_ffmpeg455.dll / opencv_world455.dll / opencv_world455d.dll) 3. 静态连接库(opencv_world455.lib / opencv_world455d.lib)

    opencv-python 3.4.1.15及 opencv-contrib-python 3.4.1.15 win64版文件

    适用于Windows64位,对应Python 3.6版本,OpenCV为3.4.1.15版本;内含有《opencv_contrib_python-3.4.1.15-cp36-cp36m-win_amd64.whl》和《opencv_python-3.4.1.15-cp36-cp36m-win_amd64.whl》两个文件

    linux_java_opencv_4.5.1.zip

    服务器是centos环境,jar包是跨平台的,但是dll不能,所以只能下载最新版的opencv源码,进行编译安装,并且打包成静态文件,大家只需要把libopencv_java451.so放到 java.library.path下面就行了

    Windows Server 2012 Opencv 缺少的DLL.zip

    公司服务器使用的是Windows Server 2012,在上面装Opencv后,使用java代码 System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 总是提示opencv_java410.dll: Can't find dependent libraries,搜索N多资源无解,最终...

    opencv-4.4.0.tar.gz

    在给定的"opencv-4.4.0.tar.gz"压缩包中,包含了OpenCV 4.4.0的源代码,这是用于在不同平台上编译和构建库的原始文件。这个版本的OpenCV特别强调了与ffmpeg的集成,ffmpeg是一个流行的多媒体处理框架,支持音频和...

    opencv3.1.0的opencv2/photo.hpp

    cmake编译不成功的话可以使用,opencv3.1.0的opencv2/photo.hpp

    opencv2.framework.zip

    4. 集成完成后,需要在源代码中引入必要的头文件,例如`#import <opencv2/opencv.h>`。 5. 编写C++代码,调用OpenCV的API实现所需功能。 OpenCV库提供了丰富的API,包括但不限于以下功能: - 图像处理:如图像转换...

Global site tag (gtag.js) - Google Analytics