Преобразовать пиксель BGRA в оттенки серого

Я пытаюсь преобразовать пиксель (4 канала) в значение в градациях серого.

Изображение выглядит как цветная карта струи:

введите описание изображения здесь

и я пытаюсь преобразовать это в это:

введите описание изображения здесь

Когда я его преобразую, я хочу установить прозрачность на оригинал по значению в градациях серого. Мое преобразование выглядит так:

uchar v = (inMat.at<cv::Vec4b>(i,j)[0]*0.07f) +
(inMat.at<cv::Vec4b>(i,j)[1]*0.72f) +
(inMat.at<cv::Vec4b>(i,j)[2]*0.21f);

Я думал эти ценности (0,07;0,72;0,21) преобразует их, но преобразовывает пиксель во что-то похожее на это:

введите описание изображения здесь

Какие значения я должен использовать, чтобы преобразовать это правильно?

0

Решение

Цветовая карта Jet, как и многие другие цветовые карты, отобразит значение оттенков серого на цвет, однако они не обязательно связаны с тем, что вы можете преобразовать его в оттенки серого и получить начальное значение.

Если вы хотите перевести отображение из карты цветов Jet в шкалу серого, вы можете сделать следующее:

cv::Mat a(255, 1, CV_8U), b;
for (int i = 0; i < 255; ++i)
{
a.at<uchar>(i) = i;
}
cv::applyColorMap(a,b,cv::COLORMAP_JET);

Теперь у вас есть соответствие между картой цветов Jet и значением оттенков серого … Вам просто нужно найти цвет в b и позиция говорит вам эквивалент в a, Не уверен, что это самый быстрый способ найти цвет, но, возможно, будет неплохо сопоставление, например, от цвета в шестнадцатеричном виде до значения в оттенках серого.

2

Другие решения

По сути, ваша картинка представляет собой скат оттенка от 0 до> 240 градусов (не полный круг, поскольку в нем нет фиолетового). Так что вам нужно найти формулу rgb -> hue. Например, попробуйте ответы этот вопрос из.

После того, как вы нашли значение оттенка, яркость составляет оттенок / 240,0;

И, возможно, вам нужно применить гамма-коррекцию к полученному изображению.

0

Я не знаю, открытое резюме, но для градаций серого вы просто средний R, G, B

Average = (R + G + B) / 3
R = Average
G = Average
B = Average
-3