opencv图书馆视频播放

时间:2012-03-18 18:44:08

标签: c++ opencv

我想播放视频

如何使用opencv完成?

1 个答案:

答案 0 :(得分:2)

我正在使用our previous conversation中的代码构建一个最小示例,该示例演示了如何从相机中检索帧并将其显示在QLabel 中。

请注意,传递给cvCreateCameraCapture()的值可能会在您的系统上发生变化。在我的Linux上0是神奇的数字。在Windows和Mac上,我使用-1

为简单起见,我只是分享main()函数的主体:

int main(int argc, char** argv)
{
    QApplication app(argc, argv);

    CvCapture* capture = cvCreateCameraCapture(0); // try -1 or values > 0 if your camera doesn't work
    if (!capture)
    {   
        std::cout << "Failed to create capture";
        return -1; 
    }   

    IplImage* frame = NULL;
    QLabel label;
    while (1) 
    {   
        frame = cvQueryFrame(capture);
        if( !frame ) break;

        QImage qt_img = IplImage2QImage(frame);
        label.setPixmap(QPixmap::fromImage(qt_img));
        label.show();

        // calling cvWaitKey() is essencial to create some delay between grabbing frames
        cvWaitKey(10); // wait 10ms
    }   

    return app.exec();
}

修改

从相机播放视频文件或视频的过程是相同的。唯一真正改变的是cvCreateCameraCapture() cvCreateFileCapture()

如果cvCreateFileCapture()正在返回NULL,则表示无法打开视频文件。这可能有两个原因:它没有处理视频的编解码器,或者找不到文件。

许多人在加载文件时在Windows上犯了以下错误:

capture = cvCreateFileCapture("C:\path\video.avi");

他们使用单斜杠,当他们应该使用double:

capture = cvCreateFileCapture("C:\\path\\video.avi");

如果某些事情可能失败,你必须始终检查通话的回复

capture = cvCreateFileCapture("C:\\path\\video.avi");
if (!capture)
{
   // print error message, then exit
}