захватить видео с использованием OpenCV.установить оттенки серого?

Я бы избегал конвертировать каждый кадр, снятый видеокамерой с cvtColor(frame, image, CV_RGB2GRAY);
Есть ли в любом случае установить VideoCapture чтобы получить непосредственно в оттенках серого?

пример:

VideoCapture cap(0);

cap.set(CV_CAP_PROP_FRAME_WIDTH,420);
cap.set(CV_CAP_PROP_FRAME_HEIGHT,340);
cap.set(CV_CAP_GREYSCALE,1); //< ???

3 ответов


Это невозможно. Вот список всех кодов:

CV_CAP_PROP_POS_MSEC - position in milliseconds from the file beginning
CV_CAP_PROP_POS_FRAMES - position in frames (only for video files)
CV_CAP_PROP_POS_AVI_RATIO - position in relative units (0 - start of the file, 1 - end of the file)
CV_CAP_PROP_FRAME_WIDTH - width of frames in the video stream (only for cameras)
CV_CAP_PROP_FRAME_HEIGHT - height of frames in the video stream (only for cameras)
CV_CAP_PROP_FPS - frame rate (only for cameras)
CV_CAP_PROP_FOURCC - 4-character code of codec (only for cameras).

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

чтобы преобразовать цветное изображение в оттенки серого, вы должны позвонить cvtColor С кодом CV_BGR2GRAY. Это не займет много времени.


Если ваша камера поддерживает YUV420, то вы можете просто взять канал Y: http://en.wikipedia.org/wiki/YUV

Как это сделать хорошо описано здесь: доступ к каждому отдельному каналу в OpenCV

предупреждение: y-канал может быть не первым матом, который вы получаете с split (), поэтому вы должны сделать imshow () всех из них отдельно и выбрать тот, который выглядит как "реальное" серое изображение. Другие будут просто waaaay из контраста, так что это будет очевидно. Для меня это был второй коврик.

обычно любая камера должна иметь возможность делать YUV420, так как отправка кадров непосредственно в RGB медленнее, поэтому YUV в значительной степени используется почти каждой камерой. :)


это невозможно, если вы используете v4l (метод захвата cv по умолчанию на настольном Linux). The CV_CAP_PROP_FORMAT существует, но просто игнорируется. Вы должны преобразовать изображения в оттенки серого вручную. Если ваше устройство поддерживает его, вы можете захотеть переопределить cap_v4l.cpp для интерфейса v4l, чтобы установить формат в оттенки серого.

на Android это возможно со следующим собственным кодом (для 0-го устройства):

#include<opencv2/highgui/highgui.hpp>
#include<opencv2/highgui/highgui_c.h>

cv::VideoCapture camera(0);
camera->open(0);
cv::Mat dest(480,640,CV_8UC1);
if(camera->grab())
    camera->retrieve(dest,CV_CAP_ANDROID_GREY_FRAME);

здесь, передает CV_CAP_ANDROID_GREY_FRAME до