|
|
1
ImportanceOfBeingErnest
7 年前
如前所述,解决方案来自
how I can-specify-how-rainbow-color-scheme-should-be-converted-to-grayscale“>如何指定
会起作用,但需要做一些小的修改。
也就是说,您需要将目标颜色映射应用于从该解决方案中选择的值,然后将生成的数组大小修改为3d。
这项工作的条件是:
-
您知道使用(
origin_cmap
)生成原始图像的颜色映射
-
该图像中的所有颜色要么是灰度(轴、文本等),要么是该图像的一部分。也就是说,在图中不应该有任何其他的线图或类似的图。
-
原始颜色映射是明确的,即不包含相同颜色两次。
-
-
原始颜色映射的整个范围已用于创建输入图像,目标颜色映射的整个范围将针对。(如果需要,可以通过指定不同的
norm
和/或
r
ange)来减弱这种情况。)
因此,以下内容将“绿色化”给定图像。
导入numpy as np
导入matplotlib.colors
将matplotlib.pyplot导入为plt
image=plt.imread(“https://i.stack.imgur.com/nylq2.png”)。
def changecolormap(图像,原点,目标点):
r=np.linspace(0,1,256)
norm=matplotlib.colors.normalize(0,1)
mapvals=原点cmap(norm(r))[:,:3]
def从\cm(颜色)中获取\u值:
color=matplotlib.colors.to_gb(颜色)
#如果颜色已经是灰度,不要更改它
如果NP.标准(颜色)<0.1:
返回颜色
#否则从颜色映射返回值
距离=np.sum((贴图-颜色)**2,轴=1)
返回目标_cmap(r[np.argmin(距离)])[:3]
newim=np.zeros_-like(图像)
对于范围内的i(image.shape[0]):
对于范围内的J(image.shape[1]):
C=图像[I,J,:3]
newim[i,j,:3]=从_cm(c)获取_值
返回newim
图(ax,ax2)=plt.子批次(ncols=2)
ax.imshow(图像)
ax2.imshow(更改颜色映射(图像,plt.cm.jet,plt.cm.viridis))
轴线(“关”)。
ax2.轴(“关闭”)
请显示())

会起作用,但需要做一些小的修改。
也就是说,您需要将目标颜色映射应用于从该解决方案中选择的值,从而将生成的数组大小修改为3D。
这项工作的条件是:
- 你知道原始图像的彩色地图(
origin_cmap )
- 图像中的所有颜色要么是灰度(轴、文本等),要么是其中的一部分。
原产地 . 也就是说,在图中不应该有任何其他的线图或类似的图。
- 原始颜色映射是明确的,即不包含相同的颜色两次。
- 原始颜色映射的整个范围已用于创建输入图像,目标颜色映射的整个范围将针对。(如果需要,可以通过指定不同的
norm 和/或r ANGE)
因此,以下内容将“绿色化”给定图像。
import numpy as np
import matplotlib.colors
import matplotlib.pyplot as plt
image = plt.imread("https://i.stack.imgur.com/NyLq2.png")
def changecolormap(image, origin_cmap, target_cmap):
r = np.linspace(0,1, 256)
norm = matplotlib.colors.Normalize(0,1)
mapvals = origin_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 color
#otherwise return value from colormap
distance = np.sum((mapvals - color)**2, axis=1)
return target_cmap(r[np.argmin(distance)])[:3]
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, :3] = get_value_from_cm(c)
return newim
fig, (ax,ax2) = plt.subplots(ncols=2)
ax.imshow(image)
ax2.imshow(changecolormap(image, plt.cm.jet, plt.cm.viridis))
ax.axis("off")
ax2.axis("off")
plt.show()

|