我正在尝试将像素(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 :(得分:2)
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
中的颜色。不确定找到颜色的最快方法是什么,但是从十六进制颜色到灰度值的映射也许很好。
答案 1 :(得分:0)
基本上,您的图片是从0-> 240度的色相渐变(不是完整的圆圈,因为其中没有紫色)。因此,您需要找到一个rgb->色相公式。例如,尝试this question的答案。
一旦找到色相值,亮度为色相/240.0;
也许您需要对生成的图像应用伽玛校正。
答案 2 :(得分:-3)
我不知道CV,但是对于灰度,您只求平均值r,g,b
Average = (R + G + B) / 3
R = Average
G = Average
B = Average