我想提取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数组。是否有一种奇特的方式来做到这一点?
答案 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()
。