1

I just installed opencv on my mac with OSX 10.8.3, i installed it with brew:

brew install opencv

and the version is 2.4.3

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

I try to display a video. The format is .asf and the codec is MJPG (i can open it only with VLC, see the screenshot)

The number of frame (if printed out in opencv or seen in VLC) is the same.

But if i run the opencv program only the first frame is showed. the other not.. why??

this is the opencv code

#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;
}

enter image description here

nkint
  • 11,513
  • 31
  • 103
  • 174

2 Answers2

1

Try compiling OpenCV with FFMPEG support enabled in order to have access to more codecs. If brew can't do it, install ffmpeg and cmake with brew, then grab the sources of OpenCV on github and recompile them.

sansuiso
  • 9,259
  • 1
  • 40
  • 58
  • 1
    how can i see if ffmpeg support is already in? because i think so – nkint Apr 19 '13 at 08:35
  • I see that your problem was already solved. However, for future reference, you can use the function cv::getBuildInformation() to have the details of the compiled modules. – sansuiso Apr 19 '13 at 11:22
1

After:

imshow("video", frame);

call:

waitKey(10);

It's mandatory to call cv::waitKey() to display the window. The parameter is the number of milliseconds that the window will remain opened. This function return the ASCII code of the key pressed during that time.

Ideally, you would replace 10 by the number that makes it display the frames at the right FPS. In other words: cv::waitKey(1000 / fps);

Community
  • 1
  • 1
karlphillip
  • 92,053
  • 36
  • 243
  • 426