Разрешение видео файла в формате 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);
Если кто знает способ лучше, пожалуйста, дайте мне знать.