Я использую OpenCV 2.4.5 на Ubuntu 12.04 64-bit. Я хотел бы иметь возможность установить разрешение ввода с моей веб-камеры Logitech C310. Камера поддерживает до 1280x960 со скоростью 30 кадров в секунду, и я могу просматривать видео в этом разрешении в guvcview. Но OpenCV всегда получает видео только на 640x480.
Попытка изменить разрешение с помощью cap.set(CV_CAP_PROP_FRAME_WIDTH, 1280) и cap.set(CV_CAP_PROP_FRAME_HEIGHT, 960) сразу после создания кепки VideoCapture не влияет; пытаясь установить их непосредственно перед тем, как получить каждый кадр, программа немедленно сработает. Я также не могу уменьшить разрешение с помощью этого метода. Я также получаю сообщение об ошибке "HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP". Я думаю, что это может быть связано, потому что оно появляется один раз, когда VideoCapture создается, и однажды, когда я пытаюсь установить ширину и высоту (но, что странно, если я не пытаюсь установить только один из них).
Я знаю, что я не первый, у кого есть эта проблема, но мне еще предстоит найти решение после того, как много гуглингов и чистки SO и в других местах в Интернете (среди многих вещей, которые я уже пробовал безрезультатно, ответ на этот вопрос StackOverflow: Увеличение разрешения захвата камеры в OpenCV). Это ошибка в OpenCV? Если это так, это довольно вопиющее.
Вот пример кода, который показывает проблему (только измененная версия кода отображения видео OpenCV):
#include <cv.h>
#include <highgui.h>
using namespace cv;
int main(int argc, char** argv)
{
VideoCapture cap(0); // open the default camera
if(!cap.isOpened()) // check if we succeeded
return -1;
cap.set(CV_CAP_PROP_FRAME_WIDTH, 160);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 120);
Mat image;
namedWindow("Video", CV_WINDOW_AUTOSIZE);
while(1)
{
// cap.set(CV_CAP_PROP_FRAME_WIDTH, 160);
// cap.set(CV_CAP_PROP_FRAME_HEIGHT, 120);
cap >> image;
imshow("Video", image);
if(waitKey(10) == 99 ) break;
}
return
}
Как бы то ни было, это дает мне два "HIGHGUI ERROR", как описано выше, и я получаю выход 640x480. Я знаю, что 160x120 - это разрешение, поддерживаемое моей камерой от запуска v4l2-ctl --list-formats-ext
. Если я раскомментирую две прокомментированные строки в цикле while, программа немедленно сработает.
Они могут быть связаны или иметь возможные решения: http://answers.opencv.org/question/11427/decreasing-capture-resolution-of-webcam/, http://answers.opencv.org/question/30062/error-setting-resolution-of-video-capture-device/