1

有人可以向我解释为什么 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 创建的。

4

1 回答 1

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();
}
于 2013-08-08T08:38:56.297 回答