Уменьшить разрешение изображения в OpenCV

Я использую OpenCV для захвата изображений с камеры A4Tech. Когда я пытаюсь уменьшить разрешение изображения, утверждение изображения не выполняется:

CvCapture *camera = cvCreateCameraCapture(1); // 0 is index of Laptop integrated camera
cvSetCaptureProperty( camera, CV_CAP_PROP_FRAME_WIDTH, 160 );
cvSetCaptureProperty( camera, CV_CAP_PROP_FRAME_HEIGHT, 140 );
assert(camera); // This is passed
while(true)
{
    // ....
    IplImage * image=cvQueryFrame(camera);
    assert(image); // This fails. (Line 71 is here)
    // ....
}

Выход:

HIGHGUI ERROR: V4L: Initial Capture Error: Unable to load initial memory buffers.
udpits: main.cpp:71: int main(int, char**): Assertion `image' failed.
Aborted

person sorush-r    schedule 01.12.2011    source источник
comment
Камера поддерживает такое разрешение? С другим разрешением работает?   -  person LiMuBei    schedule 01.12.2011
comment
@LiMuBei да. В настройках камеры Cheese есть 5 различных разрешений для камеры.   -  person sorush-r    schedule 01.12.2011
comment
Но работают ли они, когда вы их устанавливаете?   -  person karlphillip    schedule 01.12.2011
comment
Да, они работают правильно в сыре.   -  person sorush-r    schedule 01.12.2011


Ответы (1)


Кажется, вы делаете это правильно, но известно, что у OpenCV есть проблемы с подобными вещами. Вы уверены, что ваша камера поддерживает 160x140? Cheese говорит, что моя камера поддерживает 160x120, но когда я выбираю этот формат, ничего не меняется.

Одна вещь, однако, лучше всегда проверять возврат вызовов OpenCV, например:

CvCapture *camera = cvCreateCameraCapture(1);
if (!camera)
{
    // print error and exit
}

Одна вещь, которую вы можете сделать, это изменить размер захваченного кадра на разрешение, которое вы хотите. Я знаю, что это не идеально, ваш процессор будет выполнять эту задачу, и поэтому для вашего приложения будут некоторые затраты на производительность, но если вам нужно, чтобы изображение было определенного размера, а OpenCV не работает хорошо, это не так много вы можете сделать, если вы не хотите сделать операцию на OpenCV.

ИЗМЕНИТЬ:

Одна вещь, которую вы должны сделать, это проверить, действительно ли были установлены эти значения. Поэтому после их установки извлеките их с помощью cvGetCaptureProperty().

person karlphillip    schedule 01.12.2011
comment
Я не могу изменить размер... Мой процессор - vortex86DX, и при загрузке 85% я не могу получить более 18 кадров в секунду (без применения алгоритма к изображениям!). - person sorush-r; 01.12.2011
comment
В этом случае приготовьтесь запачкать руки и покопаться в OpenCV. - person karlphillip; 01.12.2011
comment
Может быть, у @mevatron есть что сказать по этому поводу. Новый парень, очень энергичный в OpenCV, вероятно, получит серебряный значок в OpenCV намного раньше меня. - person karlphillip; 01.12.2011