Numpy过滤像素索引

时间:2017-09-20 09:24:18

标签: python image numpy pixels

我想提取RGB图像的所有像素的 sum 计数,其中R = 0且B = 0,并且这些像素的x,y坐标位于图像的边界上

首先,我得到R = 0和B = 0的像素坐标:

import cv2
import numpy as np
i = cv2.imread("test2.png")
indices = np.where((i[:, :, 0] == 0) & (i[:, :, 2] == 0))

这给了我一个坐标列表。现在我想获得x位置为0或图像宽度(在本例中为21)的所有像素的总和。

我可以对列表进行排序,但如果可能的话,我想坚持使用numpy数组。是否有一种奇特的方式来做到这一点?

enter image description here

1 个答案:

答案 0 :(得分:1)

方法#1

沿着第二个轴X,这里有一个花式方式 -

(i[...,[0,2]]==0).all(-1)[:,[0,-1]].sum()

方法#2

使用多暗度索引 -

(i[:,[0,-1],[0,2]]==0).sum()

方法#3

为了提高性能,请使用slicing -

的更多内容
mask = (i[...,0]==0) & (i[...,2]==0)
out_x = (mask[:,0] + mask[:,-1]).sum()

在较旧的NumPy版本中,np.count_nonzero可能优于.sum()