【问题标题】:How to get 2D array from 3D array of an image by removing black pixels, i.e. [0,0,0], in python如何通过在python中删除黑色像素(即[0,0,0])从图像的3D数组中获取2D数组
【发布时间】:2020-08-04 15:44:20
【问题描述】:

我有一张面部皮肤的照片,周围有黑色像素。

图片是由像素 (RGB) 组成的 3d 数组

图片的数组 = 宽 * 高 * RGB

问题是图片中有这么多不属于皮肤的黑色像素。

黑色像素表示为零数组。 [0,0,0]

我想将非黑色像素的二维数组设为 [[218,195,182]。 ... [229,0, 133]] - 只有面部肤色的像素

我尝试通过查找所有 RGB 等于 0 的所有像素仅像 [0,0,0] 来弹出黑色像素:

        def eject_black_color(skin):
            list=[]
            #loop over pixels of skin-image
            for i in range(skin.shape[0]):
                for j in range(skin.shape[1]):
                    if(not (skin[i][j][0]==0 and skin[i][j][1]==0 and skin[i][j][2]==0)):
                        #add only non-black pixels to list
                        list.append(skin[i][j])
            return list

请注意,我不想从像素中提取零,例如:[255,0,125] [0,0,255] 等,因此 numpy 的非零方法不适合

如何写更高效快捷?

谢谢

【问题讨论】:

    标签: python arrays numpy cv2


    【解决方案1】:

    假设您的图片位于img。您可以使用以下代码:

    import numpy as np
    
    img=np.array([[[1,2,0],[24,5,67],[0,0,0],[8,4,5]],[[0,0,0],[24,5,67],[10,0,0],[8,4,5]]])
    filter_zero=img[np.any(img!=0,axis=-1)]   #remove black pixels 
    print(filter_zero)
    

    输出(二维数组)为:

    [[ 1  2  0]
     [24  5 67]
     [ 8  4  5]
     [24  5 67]
     [10  0  0]
     [ 8  4  5]]
    

    【讨论】:

      【解决方案2】:

      假设您的图像是img,形状为(w, h, 3)(h, w, 3)。然后你可以这样做:

      import numpy as np
      img = np.array(img)                          # If your image is not a numpy array
      myList = img[np.sum(img, axis = -1) != 0]    # Get 2D list
      

      【讨论】:

        猜你喜欢
        • 2018-01-10
        • 2023-02-02
        • 2021-08-23
        • 2012-11-06
        • 2020-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-26
        相关资源
        最近更新 更多