正如评论中所说,这是一项不平凡的任务,因为原始图像中有两种不同的颜色:“彩虹”一种,从蓝色变为红色,灰度一种,即线条和数字为黑色,有些图像中的区域是灰色的。
假设您知道生成原始图像的颜色图,您可以执行以下操作,其中使用了我在此答案中提供的部分代码:How to decode color mapping in matplotlib's Colormap?
在这里,我假设它是 jet 颜色图。
import numpy as np
import matplotlib.colors
import matplotlib.pyplot as plt
image = plt.imread("data/jetcolimage.png")
print image.shape, image.max()
r = np.linspace(0,1, 256)
norm = matplotlib.colors.Normalize(0,1)
cmap = plt.cm.jet
mapvals = cmap(norm(r))[:,:3]
def get_value_from_cm(color):
color=matplotlib.colors.to_rgb(color)
#if color is already gray scale, dont change it
if np.std(color) < 0.1:
return np.mean(color)
#otherwise return value from colormap
distance = np.sum((mapvals - color)**2, axis=1)
return r[np.argmin(distance)]
newim = np.zeros_like(image)
for i in range(image.shape[0]):
for j in range(image.shape[1]):
c = image[i,j,:3]
newim[i,j] = get_value_from_cm(c)
fig, (ax,ax2) = plt.subplots(ncols=2)
ax.imshow(image)
ax2.imshow(newim, cmap="gray")
ax.axis("off")
ax2.axis("off")
plt.show()
可以看出,剩下的问题是如何处理既不是灰度也不是颜色图一部分的值。这些来自原始图像的抗锯齿,可能会显示为白色。
有关从一种颜色图更改为另一种颜色图的方法,请参阅如何使用 Python 更改轮廓(从非 Python 中获得)中的颜色?
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句