Преобразование изображения rgb в hsv

Я пытаюсь преобразовать изображение rgb в эквивалентное изображение hsv в С#. Я нашел несколько алгоритмов для преобразования, но не смог найти, как сохранить эти значения изображения после его вычисления.

Например, после расчета h = 287, s = 0,5, v = 0,34. Где я должен сохранить эти значения в файле изображения, чтобы преобразовать его в эквивалентное изображение hsv?


person Community    schedule 06.11.2009    source источник


Ответы (3)


В общем, системы имеют дело с изображениями в RGB - если вы конвертируете в HSV, чтобы выполнить некоторую обработку в пространстве HSV, то вам нужно преобразовать пиксели в HSV, выполнить обработку, преобразовать НАЗАД в RGB и сохранить окончательные значения RGB. .

Преобразование изображения из RGB в HSV без его изменения вообще было бы ИМХО довольно бесполезным (вы просто получите точно такое же изображение).

person Aaron    schedule 06.11.2009

Посетите документацию OpenCV и внимательно изучите < strong>cvCvtColor. Там вы увидите "трюки", используемые в OpenCV для хранения значений HSV. Например, для хранения 8-битных изображений: V получает 255 * V, S получает 255 * S и H получает H/2.

person TH.    schedule 07.11.2009
comment
Если я понимаю вашу проблему, это зависит от представления изображения в памяти. Например, OpenCV может использовать три 2D-массива, по одному на канал. Итак, для пикселя в строке 10, столбце 20 у вас есть что-то вроде: V[10][20] = max(R[10][20], G[10][20], B[10][20]) , в соответствии с уравнением преобразования цвета для V. Представление изображения в памяти зависит от используемой библиотеки. - person TH.; 07.11.2009
comment
Это может вам помочь: thsant.blogspot.com/search/label/opencv. Имейте в виду следующее: мониторы и (возможно) графическое окружение вашей системы могут отображать изображения RGB (поскольку монитор является устройством RGB). Предположим, вы применили преобразование цветового пространства. Ваше изображение имеет значения для 1-го канала, для 2-го канала и для 3-го канала. Система, вероятно, не знает, являются ли эти каналы каналами RGB, HSV или YCrCb. Большинство систем будут пытаться отобразить изображение как RGB, создавая любопытные изображения неправильного цвета. - person TH.; 07.11.2009

Если вы заинтересованы в повторном использовании значений HSV каждый раз, когда вам нужно обработать изображение, вы можете написать двоичный файл, который их содержит. Однако это включает в себя дублирование вашего изображения в той или иной форме, но это может быть полезно, если у вас есть несколько процессов, которым нужны эти значения, и из-за большого размера изображения вы хотели бы избежать шага преобразования. В общем, однако, вы читаете значения RGB, конвертируете их в HSV, обрабатываете их, конвертируете обратно в RGB и сохраняете обработанное изображение.

Если вы хотите сохранить свои значения HSV в файле изображения и иметь возможность отображать его как «карту» этих каналов, вы, вероятно, можете думать об этом с точки зрения отображения значений HSV на интервал RGB. Значения RGB находятся в интервале 0–255 каждое, тогда как в HSV оттенок находится в диапазоне 0–360, S и V — в диапазоне 0,0–0,1. Это означает, что вы можете сохранить значения S и V в G и B, умножив их на 255:

G = S * 255;
B = V * 255;

Что касается значения H, вы должны отобразить его в пространстве 0–255, поэтому вы умножаете его на (255/360) и сохраняете в компоненте R. Итак, последняя часть:

R = H * 255 / 360;
person luvieere    schedule 06.11.2009
comment
Вопрос, который вы должны задать, заключается в том, существует ли формат изображения, в котором значения пикселей хранятся в виде троек HSV - лично я никогда не слышал о таком формате. Может быть, вы можете сказать мне, какой формат изображения вы используете? Это PNG, JPEG, GIF? Если вы используете общий формат изображения, подобный этому и многим другим, скорее всего, вы не сможете хранить свои значения HSV непосредственно в изображении, не испортив его и не сделав его нечитаемым для любой другой программы, которая ожидает, что это будет RGB. - person luvieere; 07.11.2009
comment
Не могли бы вы вставить сюда точные слова вашего задания? Я думаю, это поможет мне понять, что имел в виду ваш инструктор и какой подход вы могли бы использовать. - person luvieere; 07.11.2009
comment
Я просмотрел вашу домашнюю работу, и она действительно немного запутана. В любом случае, я отредактирую свой ответ, чтобы включить возможное решение. - person luvieere; 07.11.2009