определить цветовое пространство с помощью openCV - PullRequest
36 голосов
/ 23 января 2010

как я могу увидеть цветовое пространство моего изображения с openCV?

Я хотел бы убедиться, что это RGB, прежде чем конвертировать в другой с помощью функции cvCvtColor ()

спасибо

Ответы [ 5 ]

18 голосов
/ 26 января 2010

К сожалению, OpenCV не предоставляет каких-либо указаний относительно цветового пространства в структуре IplImage, поэтому, если вы слепо берете IplImage откуда-то, просто невозможно узнать, как он был закодирован. Более того, ни один алгоритм не может однозначно сказать вам, следует ли интерпретировать изображение как HSV против RGB - это всего лишь набор байтов для машины (должно это быть HSV или RGB?). Я рекомендую вам обернуть ваши IplImages в другую структуру (или даже класс C ++ с шаблонами!), Чтобы помочь вам отслеживать эту информацию. Если вы действительно в отчаянии и имеете дело только с определенным типом изображений (сцены на улице, офисы, лица и т. Д.), Вы можете попытаться вычислить некоторую статистику по вашим изображениям (например, построить статистику гистограммы для естественных изображений RGB и некоторые для естественные изображения ВПГ), а затем попытайтесь классифицировать ваше совершенно неизвестное изображение, сравнивая, к какому цветовому пространству оно ближе.

6 голосов
/ 22 апреля 2010

txandi делает интересный момент. OpenCV имеет цветовое пространство BGR, которое используется по умолчанию. Это похоже на цветовое пространство RGB за исключением того, что каналы B и R физически переключаются в изображении. Если для вас важен порядок физических каналов, вам необходимо преобразовать изображение с помощью этой функции: cvCvtColor (defaultBGR, imageRGB, CV_BGR2RGB).

3 голосов
/ 03 февраля 2010

Структура IplImage имеет поле с именем colorModel, состоящее из 4 символов.К сожалению, OpenCV игнорирует это поле.Но вы можете использовать это поле для отслеживания различных цветовых моделей.

2 голосов
/ 02 августа 2011

Как сказал rcv , нет способа программно обнаружить цветовое пространство путем проверки трех цветовых каналов, если только вы не обладаете априорным знанием содержания изображения маркер на изображении, цвет которого известен). Если вы будете принимать изображения из неизвестных источников, вы должны разрешить пользователю указывать цветовое пространство своего изображения. Хорошим значением по умолчанию было бы принять RGB.

Если вы изменяете какие-либо цвета пикселей перед отображением и используете средство просмотра не-OpenCV, вам, вероятно, следует использовать cvCvtColor(src,dst,CV_BGR2RGB) после того, как вы завершите работу всех своих цветовых фильтров. Если вы используете OpenCV для просмотра или сохраняете изображения в файл, убедитесь, что они находятся в цветовом пространстве BGR.

0 голосов
/ 16 марта 2018

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

Для подробного объяснения вы можете обратиться по ссылке ниже.

https://dryrungarage.wordpress.com/2018/03/11/image-processing-basics/

...