2014-01-28 2 views
1

Используя класс VideoCapture OpenCV, я могу записать 8-битные изображения с моей веб-камеры. Но, мне нужно больше значений для цвета. Поэтому мне, вероятно, понадобится 16-битное или 24-битное изображение. Как это сделать в OpenCV?Захват изображений с более высокой глубиной в OpenCV

+0

Что именно вы подразумеваете под: «Но мне нужно больше значений для цвета»? Зачем вам нужно больше ценностей? Что значит «больше»? Каков возможный вариант использования? – Mailerdaimon

+0

Вокруг яркого источника света на моем изображении, все есть большой капля белых пикселей. Я хочу, чтобы иметь возможность квантовать цвета более тонким способом, чтобы получить все оттенки белого –

+0

@RajathS вы попробовали выравнивание гистограммы – baci

ответ

1

Если ваш объект является канцелярским, вы можете создать более чистое изображение путем усреднения последовательных кадров. Может даже быть некоторая ценность в сохранении результата с большей глубиной бит, но не ожидайте чудес - 8-битная камера и 8-битный видеокодек никогда не дадут вам правильное 16-битное видео.

Например, вот кадр, захваченный веб-камерой в условиях низкой освещенности. Это довольно шумно:

Webcam image of a boatyard in low light conditions

И вот результат усреднения сотни последовательных кадров. Это лучше, но не идеально.

Cleaner image obtained by averaging 100 consecutive frames from the same webcam

+0

@squeamih ossifrage Что вы подразумеваете под усреднением сто консилиумов? его среднее значение, как получение консистентных кадров с веб-камеры, а не получение среднего количества этих 100 кадров или включение среднего алгоритма для улучшения изображения? – AHF

+1

@Ahmad Получите сотню последовательных кадров и сравните их вместе. С одним кадром вы ничего не можете сделать, чтобы увеличить глубину пикселя. –

+0

Я пробовал усреднение. Вокруг яркого источника света на моем изображении, все есть большой капля белых пикселей. Я хочу, чтобы иметь возможность квантовать цвета более тонким образом, чтобы получить все оттенки белого. –

0

Большинство веб-камер поддерживают только 8 бит на цветовой канал. Убедитесь, что ваша камера поддерживает более высокую глубину; и не используйте OpenCV для извлечения видео для этого случая. OpenCV преобразует все данные в 8-битные & 3 канала.

Используйте API-интерфейс производителя камеры (или стороннюю библиотеку, например, v4l), чтобы получить данные более высокой глубины и надавите на эти данные в IplImage или Mat вручную. Что-то вроде:

// allocate Mat data 
Mat frame(640, 480, CV_16UC3);; 
// populate 
loop{ 
frame.at<Vec3b>(i,j) = ImageReturnedByCamera.at(i,j); 
} 
+0

Но если мы используем камеру хорошего качества с opencv, она дает нам 8-битное изображение с низким качеством? – AHF

+0

Я думаю, что opencv Класс видеозахвата имеет свойство для установки кодека (для поддерживаемых камер), но, как я знаю, вы должны написать кодек самостоятельно, так как библиотека имеет ограниченный интерфейс для высококачественных камер. Пример: uEye IDS https://code.google.com/p/low-cost-vision/source/browse/trunk/Vision/ueyeOpencv/include/UEyeOpenCV.hpp?r=260. Аналогичные проблемы: http://opencv-users.1802565.n2.nabble.com/Need-to-perform-16-bit-single-channel-video-capture-or-capture-raw-bin-data-td5411180.html , http://forum.mesa-imaging.ch/viewtopic.php?f=33&t=151 – baci

Смежные вопросы