Разрешение видео файла в формате OpenCV изменить

Я создаю программу в OpenCV (2.4.8), которая должна читать видеофайлы и выполнять некоторые вычисления на них. Для этих вычислений мне не нужны кадры с высоким разрешением,я отлично справляюсь с разрешением 640*360.

в ранних тестах у меня была веб-камера, и я использовал:

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);

который изменил размер изображения идеально. Теперь я перехожу к следующему шагу, где я хочу использовать свою программу для сохраненного видео вместо живой ленты (которую я использовал для тестирования). когда я измените " 0 " на путь к исходному файлу (строка), файл будет загружен, но разрешение останется 1920*1080.

Я сделал что-нибудь не так? Есть ли способ загрузить видео с более низким разрешением "на лету"?

Я прочитал документацию OpenCV. Некоторые настройки помечены как "только камеры", но этот параметр не: http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html#videocapture-videocapture

Я использование OpenCV на mac и установка его с MacPorts.

Дайте мне знать, если нужны еще подробности.

спасибо заранее за вашу помощь

edit: Я понял, что кепка.набор.(..) функции возвращают логическое значение, поэтому я попытался распечатать их, и они оба возвращают 0. Это конечно подтверждает, что кадр не изменяется. До сих пор не знаю, почему...

edit 2: Итак, теперь для временного решения я использую следующее строка после чтения (изображение):

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

и это работает. Но я предполагаю, что это не самое оптимальное решение.

1 ответов


используя

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

после чтения (изображение) кажется лучшим решением для решения этой проблемы. Таким образом, общий (тестовый) код становится:

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);

Если кто знает способ лучше, пожалуйста, дайте мне знать.