it-swarm.com.ru

определить цветовое пространство с помощью openCV

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

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

спасибо

35
aneuryzm

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

17
rcv

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

6
Oliver

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

3
f3lix

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

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

2
Scottie T

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

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

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

0
Raj