1

我刚刚用 OSX 10.8.3 在我的 Mac 上安装了 opencv,我用 brew 安装了它:

brew install opencv

版本是 2.4.3

>>> ls /usr/local/Cellar/opencv
2.4.3

我尝试显示视频。格式是.asf,编解码器是MJPG(我只能用VLC打开,看截图)

帧数(如果在 opencv 中打印出来或在 VLC 中看到)是相同的。

但是如果我运行 opencv 程序,只显示第一帧。另一个不是..为什么?

这是opencv代码

#include <iostream> 
#include <string> 
#include <sstream>

#include <opencv2/core/core.hpp> 
#include <opencv2/imgproc/imgproc.hpp> 
#include <opencv2/highgui/highgui.hpp> 

using namespace std;
using namespace cv;


int main(int argc, char *argv[]) {

    Mat frame;
    int numframe = 0;

    if (argc != 2) {
        cout << "Not enough parameters" << endl;
        return -1;
    }

    const string source = argv[1];
    VideoCapture capture(source);
    namedWindow("video", CV_WINDOW_AUTOSIZE);

    if (!capture.isOpened()) {
        cout  << "Could not open " << source << endl;
        return -1;
    }

    for(;;) {
        capture >> frame;
        numframe++;
        if (frame.empty()) {
            cout << "frame empty.." << endl;
            break;
        }
        cout << numframe << endl;
        imshow("video", frame);
    }

    return 0;
}

在此处输入图像描述

4

2 回答 2

1

尝试在启用 FFMPEG 支持的情况下编译 OpenCV,以便访问更多编解码器。如果brew做不到,用brew安装ffmpeg和cmake,然后在github上抓取OpenCV的源码,重新编译。

于 2013-04-18T18:42:18.757 回答
1

后:

imshow("video", frame);

称呼:

waitKey(10);

必须调用cv::waitKey()才能显示窗口。该参数是窗口将保持打开状态的毫秒数。此函数返回在此期间按下的键的 ASCII 码。

理想情况下,您将替换10为使其以正确的 FPS 显示帧的数字。换句话说:cv::waitKey(1000 / fps);

于 2013-04-18T18:50:51.103 回答