如何使用OpenCV从我的磁盘播放视频文件。

时间:2011-08-08 15:22:46

标签: visual-c++ opencv

请帮助我完成上述任务。我是openCV的新手。我在我的系统中安装了OpenCV 2.2,并使用VC ++ 2010 Express作为IDE。我的笔记本电脑中没有内置网络摄像头...... 只是我学会了如何加载图像。我非常渴望从我的磁盘加载一个视频文件(最好是mp4,flv格式),并希望使用openCV播放它。

2 个答案:

答案 0 :(得分:1)

使用OpenCV的 C 界面(在Windows机箱上对我来说效果更好),加载视频文件的功能是cvCaptureFromAVI()。之后,您需要使用传统循环通过cvQueryFrame()然后cvShowImage()检索框架,以便在使用cvNamedWindow()创建的窗口中显示这些框架。

CvCapture *capture = cvCaptureFromAVI("video.avi");
if(!capture)
{   
    printf("!!! cvCaptureFromAVI failed (file not found?)\n");
    return -1; 
}   

int fps = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);
printf("* FPS: %d\n", fps);

cvNamedWindow("display_video", CV_WINDOW_AUTOSIZE);

IplImage* frame = NULL;
char key = 0;

while (key != 'q')
{   
    frame = cvQueryFrame(capture);
    if (!frame)
    {   
        printf("!!! cvQueryFrame failed: no frame\n");
        break;
    }

    cvShowImage("display_video", frame);

    key = cvWaitKey(1000 / fps);
}

cvReleaseCapture(&capture);
cvDestroyWindow("display_video");

This blog post为您要完成的任务带来了一些额外的信息。

答案 1 :(得分:0)

(嗯......你好像不是自己想做点什么但是无论如何)

来自docs

#include "opencv2/opencv.hpp"

using namespace cv;

int main(int, char**)
{
    VideoCapture cap(0); // open the default camera
    if(!cap.isOpened())  // check if we succeeded
        return -1;

    //Mat edges;
    namedWindow("frames",1);
    for(;;)
    {
        Mat frame;
        cap >> frame; // get a new frame from camera
        //ignore below sample, since you only want to play
        //cvtColor(frame, edges, CV_BGR2GRAY);
        //GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5);
        //Canny(edges, edges, 0, 30, 3);
        //imshow("edges", edges);
        imshow("frames", frame);
        if(waitKey(30) >= 0) break;
    }
    // the camera will be deinitialized automatically in VideoCapture destructor
    return 0;
}

这是使用opencv 1.x apis的old way