用于特定颜色部分提取的 Numpy

Numpy for specific color section extraction

我是 python 的新手,正在尝试将图像中的彩色部分与灰度部分分开。 尽管此代码(见下文)为我提供了我正在寻找的结果,但它需要很长时间(普通图像需要 10 秒以上)。

我找了一个小时没有找到合适的答案,因为大多数只是分开特定的颜色(黑色、白色...)或阈值。

据我(已经)知道 numpy 是可行的方法,但我没有成功 :S

期待帮助 - 谢谢!

    gray_elements = np.zeros_like(image)
    gray_elements[:] = 255

    colored_segments = np.zeros_like(image)
    colored_segments[:] = 255
    
    # Separate black-to-white-colors from colored
    for y in range(image.shape[0]):
        for x in range(image.shape[1]):

            pxl = image[y, x]
            if max(pxl) - min(pxl) > 5:
                colored_segments[y, x] = pxl
            else:
                gray_elements[y, x] = pxl

未经测试,但因为今天是圣帕特里克节...

如果您有一个包含 3 通道 RGB 图像的 Numpy 数组 na,它将有 na.shape(h,w,3)

您可以获得每个点的 3 个通道中的最大值:

ma = np.amax(na, axis=2, keepdims=True)

最小值:

mi = np.amin(na, axis=2, keepdims=True)

那么区别是:

diff = ma - mi

然后制作一个布尔值 (true/false) 掩码:

grey = diff < 5

If/when你对Numpy越来越熟悉了,你可能会用到peak-to-peak函数。


但通常情况下,您会使用 OpenCV,转换为 HSL 色彩空间,然后找到饱和度通道较低的像素,这意味着颜色不饱和,而是灰色。