我正在尝试将RGB热图图像转换为灰度热图图像。首先,我认为这是一个简单的 rgb到灰度转换。但事实并非如此。
例如,蓝色可能代表柔软的东西,而红色可能代表坚硬的东西。
使用常用的简单的 rgb到灰度转换方法,我发现红色和蓝色已转换为保存灰色,尽管它们具有非常不同的表示性质。
但是我想要这样的东西,其中蓝色是深灰色,红色是亮灰色。
我搜索了很多东西。不幸的是我找不到(或者我听不懂)。阅读有关rgb颜色模型的文章后,我找到了一种生成灰度图像的方法。我的代码是
import colorsys
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
img = mpimg.imread('input_image/abnormal_hi_res.png')
img = img[ : , : , 0:3] # keep only r, g, b channels
new_image = np.zeros((img.shape[0], img.shape[1]))
for y_pos in range(img.shape[0]):
for x_pos in range (img.shape[1]):
color = img[y_pos, x_pos]
r,g,b = color
h, _, _ = colorsys.rgb_to_hls(r, g, b)
new_image[y_pos, x_pos] = 1.0 - h
plt.imshow(new_image, cmap='gray')
plt.show()
但是我相信应该有一个由经过验证的数学支持的好方法。
请帮助我找出解决此问题的正确方法。
答案 0 :(得分:2)
您可以点击这些链接。他们对热图和灰度有一些很好的注释
https://docs.opencv.org/3.1.0/de/d25/imgproc_color_conversions.html https://matplotlib.org/users/colormaps.html
* UPDATE
首先,您需要将BGR图像转换为LUV,然后将其转换为灰度图像。使用opencv。
在opencv中将BGR转换为LUV的代码。
gray = cv2.cvtColor(img, cv2.COLOR_BGR2LUV)