Я пытаюсь использовать openCV / c ++ для захвата левого и правого изображения со стереокамеры LI-USB30_V024 без автоматического преобразования его в RGB. Камера выводит изображения в формате YUYV.
Я пытался использовать videoCapture.set (CV_CAP_PROP_CONVERT_RGB, false), но получаю сообщение «HIGHGUI ERROR: V4L: Свойство (16) не поддерживается устройством».
Причина, по которой я хочу избежать преобразования в RGB, заключается в том, что камера упаковывает левое и правое видео в одно изображение YUYV. Обе камеры являются монохромными, и, насколько я могу судить, информация о левом изображении кодируется в каналах Y, а правое изображение — в каналах U и V. Например, если я запускаю guvcview, я получаю одно изображение, которое содержит как левое, так и правое изображения в суперпозиции. Это выглядит как черно-белое изображение (левое изображение закодировано в Y-каналах) с зеленым и розовым изображением, лежащим сверху (правая камера закодирована в УФ-каналах). Я знаю, это звучит довольно необычно, поэтому, если у вас есть какие-либо другие идеи / вопросы по этому поводу, не стесняйтесь.
Моя цель — захватить изображение как YUYV, чтобы я мог использовать split (), чтобы отделить левое изображение (Y-каналы) от правого (U и V-каналы) и отобразить их оба в виде монохромных изображений. Однако, как только изображение было преобразовано в RGB, каналы яркости и доминирования смешиваются вместе, и становится невозможным разделить два изображения.
Подводя итог, мне нужно захватить видео, не конвертируя его в RGB, чтобы сохранить формат YUYV. Это позволит мне разделить левое и правое изображения.
ИЛИ ЖЕ Мне нужен способ захвата левого и правого изображений отдельно, но я думаю, что это маловероятно.
Я думаю, что это было бы возможно в v4l, но я бы предпочел использовать только openCV, если это возможно.
Спасибо!
Я не думаю, что есть способ сделать это в openCV. В конце концов, не было особых проблем захватить кадры с помощью V4L2 и сохранить их в openCV Mats.
Раньше я работал над камерой, которая выдает данные YUV420, и получил некоторые проблемы при настройке. Но эта функция работает для меня.
videoCapture.set (CV_CAP_PROP_CONVERT_RGB, 0)
Можете ли вы проверить, есть ли другие конфигурации, которые вызывают проблему.
В заголовочном файле videoio.hpp:
// Generic camera output modes.
// Currently, these are supported through the libv4l interface only.
enum { CAP_MODE_BGR = 0, // BGR24 (default)
CAP_MODE_RGB = 1, // RGB24
CAP_MODE_GRAY = 2, // Y8
CAP_MODE_YUYV = 3 // YUYV
};
Использование:
cv::VideoCapture camera = cv::VideoCapture();
camera.open(0);
camera.set(CV_CAP_PROP_MODE, CV_CAP_MODE_YUYV);