【问题标题】:Numpy for specific color section extraction用于特定颜色部分提取的 Numpy
【发布时间】:2021-03-18 03:46:46
【问题描述】:

我对 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

【问题讨论】:

    标签: python numpy colors grayscale


    【解决方案1】:

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

    如果您有一个包含 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
    

    然后制作一个布尔(真/假)掩码:

    grey = diff < 5
    

    如果/当您对 Numpy 更加熟悉时,您可能会使用 peak-to-peak 函数。


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

    【讨论】:

    • 非常感谢!拯救了我的一天!最终得到了更多的代码,但现在速度更快了;)+1
    猜你喜欢
    • 2016-02-15
    • 1970-01-01
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 2018-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多