雕刻时光

just do it……nothing impossible
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

opencv读取并播放avi视屏

Posted on 2014-01-18 16:14  huhuuu  阅读(4700)  评论(0编辑  收藏  举报

  视屏的本质是一些静态的图像的集合,opencv可以不断读取视屏中的图片,显示,就产生了类似电影的效果。

  这样也就可以通过opencv对实时的视屏流进行处理了。

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



int main(){
    cvNamedWindow("Example2",CV_WINDOW_AUTOSIZE);//申请可以自动调节大小的窗口Example1
    CvCapture *capture=cvCreateFileCapture("F:/film/kq.avi");//读取avi格式的影片
    IplImage*frame;
    while(1){
        frame = cvQueryFrame(capture);//读取下一个影片帧率
        if(!frame)break;
        cvShowImage("Example2",frame);
        char c=cvWaitKey(33); //每读取一个视频片度就停止33毫秒,并且会收集键盘的输入
        if(c == 27)break;//27就是对应键盘上的ESC建,如果没有按键盘的话C为-1
    }
    cvReleaseCapture(&capture);
    cvDestroyWindow("Example2");

    return 0;
}


带滚动条的程序
#include "stdafx.h"
#include "cv.h"
#include "highgui.h"

int g_slider_position = 0;
CvCapture * g_capture =NULL;

void onTrackbarSlide(int pos){  //再拖动滚动条的时候,滚动条的位置会被作为int数字传入
    cvSetCaptureProperty(
        g_capture,
        CV_CAP_PROP_POS_FRAMES,
        pos
        );
}

int main(){
    cvNamedWindow("Example3",CV_WINDOW_AUTOSIZE);//申请可以自动调节大小的窗口Example1
    g_capture=cvCreateFileCapture("F:/film/kq.avi");//读取avi格式的影片

    int frames = (int) cvGetCaptureProperty(
            g_capture,
            CV_CAP_PROP_FRAME_COUNT
    );

    if(frames != 0){
        cvCreateTrackbar(  //进度条
            "Position",
            "Example3",
            &g_slider_position,
            frames,
            onTrackbarSlide
            );
    }

    IplImage * frame;
    while(1){
        frame = cvQueryFrame(g_capture);//读取下一个影片帧率
        if(!frame)break;
        cvShowImage("Example3",frame);
        char c=cvWaitKey(33); //每读取一个视频片度就停止33毫秒,并且会收集键盘的输入
        if(c == 27)break;//27就是对应键盘上的ESC建,如果没有按键盘的话C为-1
    }

    cvReleaseCapture(&g_capture);
    cvDestroyWindow("Example2");

    return 0;
}