我正在尝试将 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()
但我相信应该存在一种经过验证的数学支持的好方法。
请帮我找出解决这个问题的正确方法。
最佳答案
您可以点击这些链接。他们对热图和灰度有一些很好的注释
https://docs.opencv.org/3.1.0/de/d25/imgproc_color_conversions.html https://matplotlib.org/users/colormaps.html
*更新
首先,您需要将 BGR 图像转换为 LUV,然后将其转换为灰度图像。使用opencv。
opencv中BGR转换为LUV的代码。
灰色 = cv2.cvtColor(img, cv2.COLOR_BGR2LUV)
关于python - 将 RGB 热图图像转换为灰度热图的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53827622/