Проблема, с которой я столкнулся, заключается в том, что я не могу изменить разрешение захвата видео OpenCV. Разрешение всегда 640х480, не смотря ни на что. Код, который я использую, написан на C ++, и я использую opencv 3.4.8. Я создал очень простую программу для этого, и она, кажется, не работает, что бы я ни пытался.
Вот код целиком:
#include "opencv2/opencv.hpp"
using namespace cv;
int main(int argc, char** argv)
{
VideoCapture cap(0);
cap.set(CAP_PROP_FRAME_HEIGHT, 1080);
cap.set(CAP_PROP_FRAME_WIDTH, 1920);
// open the default camera, use something different from 0 otherwise;
// Check VideoCapture documentation.
if (!cap.open(0))
return 0;
for (;;)
{
Mat frame;
cap.read(frame);
if (frame.empty()) break; // end of video stream
imshow("this is you, smile! :)", frame);
if (waitKey(10) == 27) break; // stop capturing by pressing ESC
}
// the camera will be closed automatically upon exit
// cap.close();
return 0;
}
Когда я запускаю приведенный выше код, кадр всегда 640x480.
Я пробовал менять разрешение с cap.set()
на меньшее и большее разрешение. Я использую камеру ImageSource и знаю, что разрешения, которые я пытаюсь использовать, поддерживаются камерой, и я могу просматривать видео с этими разрешениями в другой программе.
Я пробовал использовать разные камеры / веб-камеры.
Я пробовал явно изменить API серверной части при создании объекта VideoCapture
, т.е. VideoCapture cap(0, CAP_DSHOW)
. Я пробовал DSHOW
, FFMPEG
, IMAGES
и т. Д.
Я пробовал запускать одну и ту же программу на разных компьютерах.
Результат всегда одно и то же разрешение 640x480.
Есть ли что-то простое, чего мне не хватает? Все остальные сообщения, которые я могу найти на SO, просто указывают на использование cap.set()
для изменения ширины и высоты.