Question

I'm creating a program in OpenCV (2.4.8) which should read video files and do some calculations on them. For these calculations I don't need the high-res frames, I'm perfectly fine with 640*360 as resolution.

In early tests I had my webcam attached and I used:

VideoCapture cap(0);
cap.set(CV_CAP_PROP_FRAME_WIDTH, 640);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 360);
Mat image;
cap.read(image);
namedWindow("firstframe", 1);
imshow("firstframe", image);
waitKey(0);

Which resized the image perfectly. Now I'm getting to the next step where I want to use my program for stored video instead of a live feed (which I used for testing). When I change the '0' with the source file path (string), the file is loaded, but the resolution remains 1920*1080.

Did I do anything wrong? Is there a way to load the video at a lower resolution 'on the fly'?

I've read the OpenCV documentation. Some of the settings are labeled 'cameras only' but this setting isn't: http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html#videocapture-videocapture

I'm using OpenCV on a mac, and installed it with MacPorts.

Let me know if any more details are needed.

Thanks ahead for your help

edit: I've realised that the cap.set(...) functions return a boolean, so I've tried printing them out and they both return 0. This of course confirms that the frame isn't resized. Still no clue as to why...

edit 2 : So now, for a temporary solution I use the following line after read(image):

resize(image, image, Size(640, 360), 0, 0, INTER_CUBIC);

And this works. But I'm guessing this isn't really the most optimal solution.

Was it helpful?

Solution

using

resize(image, image, Size(640, 360), 0, 0, INTER_CUBIC);

after read(image) seems to be the best solution to solve this problem. So the total (test) code becomes:

VideoCapture cap("path/to/file");
cap.set(CV_CAP_PROP_FRAME_WIDTH, 640);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 360);
Mat image;
cap.read(image);
resize(image, image, Size(640, 360), 0, 0, INTER_CUBIC);
namedWindow("firstframe", 1);
imshow("firstframe", image);
waitKey(0);

If anyone knows of a better way, please let me know.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top