Подтвердить что ты не робот

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

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

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

спасибо

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

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