OpenCV:.avi文件无法使用C ++ API打开,使用C打开

时间:2013-08-08 08:14:26

标签: opencv video load avi

有人可以向我解释为什么OpenCV无法使用C ++ API打开.avi文件,而是用C API打开它吗?

以下是两个代码段:

C ++:

Mat source;
VideoCapture stream("Video.avi");

if (!stream.isOpened()){
    std::cout << "Stream cannot be opened" << std::endl;
    return -1;
}
while(1)

    if(!stream.read(source)) {
        std::cout << "Error reading video frame" << endl;
    }

imshow("Source", source);

无法打开Video.avi,并且一次又一次打印“读取视频帧错误”。 ffmpeg.dll在路径中,我也安装了ffdshow。

C:

CvCapture* stream = cvCreateFileCapture( "Video.avi" );
IplImage* source;
while(1) {
    source = cvQueryFrame( stream );
    if( !source ) printf("\n Problem");
    Mat src(source);
    imshow("source", src);
    if(waitKey(1) >= 0) break;
}

这会打开Video.avi没有问题。

感谢您的帮助!

PS。也许值得一提的是,Video.avi本身是使用OpenCV创建的。

1 个答案:

答案 0 :(得分:0)

您的C和C ++代码不相同。这段代码可以使用:

int main( int argc, char** argv )
{
    Mat source;
    VideoCapture stream("video.avi");

    if (!stream.isOpened())
    {
        std::cout << "Stream cannot be opened" << std::endl;
        return -1;
    }

    while(1)
    {
        stream >> source;
        if(source.empty()) 
        {
            std::cout << "Error reading video frame" << endl;
        }
        imshow("Source", source);
        waitKey(20);
    }
    stream.release();
    getchar();
}