【发布时间】:2022-07-30 06:31:50
【问题描述】:
假设我有一个图像的 numpy 数组,img:
import numpy as np
img = np.random.rand(100,100,3) * 255
还有一个颜色列表,palette
white = np.array([255,255,255])
red = np.array([255,0,0])
blue = np.array([0,0,255])
palette = np.array([white, red, blue])
如何创建一个新的图像数组 new_img,其中每个像素通过欧几里得距离比调色板中的任何其他颜色更接近白色的每个像素都更改为白色 ([255,255,255]) 和其他所有颜色像素颜色保持原样。 (能够改变距离函数会很好,但不是硬性要求。)
我可以用 for 循环遍历每个像素以天真的方式做到这一点,但它当然比它可能需要的要慢得多。
【问题讨论】:
-
这取决于你如何定义距离,例如
RED=[255,0,0]与BLACK[0,0,0]的距离与BLUE=[0,0,255]相同,与此GREY=[85,85,85]或[42,84,129]相同 -
人类感知不是线性数学的。看这里en.wikipedia.org/wiki/Color_difference
-
对图像进行调色是一个常见的问题,并且没有好的捷径解决方案。您需要逐个像素地进行操作。