【问题标题】:python numpy threshhold specific valuespython numpy阈值特定值
【发布时间】:2021-01-11 20:44:07
【问题描述】:

如果我有一个 RGB 图像作为 HxWxC numpy 数组,并且我想将其减少到一个 HxW numpy 数组,如果颜色不是精确的 RGB 值,则所有条目为 0,如果它是精确的 RGB 值,则为 255 ,我目前正在这样做:

im2 = (im[..., 2] == 255) * (im[..., 0] == 0) * (im[..., 1] == 0) * numpy.uint8(255)

此代码将所有不是 (0, 0, 255) 的像素设置为 0,将 (0, 0, 255) 设置为 255。但我想必须有一种更简洁、更紧凑的方法来做到这一点。在那儿?谢谢!

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    您可以在最后一个轴上使用np.wherenp.ndarray.all

    >>> x = np.array([[[255,0,0], [0,255,0], [0,0,255]],
                    [[1,12,255], [23,45,22], [0,0,0]],
                    [[0,0,255],[1,2,3], [255,234,232]]])
    >>> x
    array([[[255,   0,   0],
            [  0, 255,   0],
            [  0,   0, 255]],
    
           [[  1,  12, 255],
            [ 23,  45,  22],
            [  0,   0,   0]],
    
           [[  0,   0, 255],
            [  1,   2,   3],
            [255, 234, 232]]])
    
    >>> np.where((x == [0,0,255]).all(axis=-1), 255, 0)
    array([[  0,   0, 255],
           [  0,   0,   0],
           [255,   0,   0]])
    

    【讨论】:

      【解决方案2】:

      一个简单的方法是检查您的颜色是否与您的确切 RGB 匹配并乘以 255(诀窍是当您将 False 乘以数字时,它会输出 0,如果您将 True 乘以任意数字,它的作用类似于 1)。 [None,None,:] 添加正确广播的维度。 all(-1) 检查 all 三个 RGB 颜色是否匹配:

      #the color you wish to match
      rgb = np.array([0,0,255])
      #the output you want
      (im==rgb[None,None,:]).all(-1)*numpy.uint8(255)
      

      【讨论】:

        猜你喜欢
        • 2017-07-10
        • 2015-12-31
        • 1970-01-01
        • 2018-04-21
        • 1970-01-01
        • 2017-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多