
Question:
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;
}
<img alt="enter image description here" class="b-lazy" data-src="https://i.stack.imgur.com/2QeK7.png" data-original="https://i.stack.imgur.com/2QeK7.png" src="https://etrip.eimg.top/images/2019/05/07/timg.gif" />
Answer1:After:
imshow("video", frame);
call:
waitKey(10);
It's mandatory to call <a href="https://stackoverflow.com/a/5493668/176769" rel="nofollow">cv::waitKey()
</a> 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);
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.