Уменьшить разрешение изображения в OpenCV - PullRequest
2 голосов
/ 01 декабря 2011

Я использую 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

1 Ответ

6 голосов
/ 01 декабря 2011

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

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

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

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

EDIT:

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

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