我是openCV和Python的新手。我想计算每行和每列图像的黑色像素总数。任何人都可以给出提示或帮助吗?
答案 0 :(得分:2)
Here你可以找到计算数组中非零元素的countNonZero
函数,在你的情况下它将是一行或一列。
cv2.countNonZero(src) → retval
PS:该函数将返回非黑色像素的数量,您要做的就是从像素数(分辨率或行* cols)中减去该数字。
答案 1 :(得分:2)
正如Miki建议的那样,你可以利用cv2.reduce
。
使用numpy.where
创建一个包含1
的黑色像素的面具,以及任何其他强度的0
。
现在调用cv2.reduce
两次(每个轴一次),执行REDUCE_SUM
,并将输出数据类型设置为32位整数。
代码:
import cv2
import numpy as np
# Make random image
img = np.zeros((128,128),np.uint8)
cv2.randu(img, 0, 256)
mask = np.uint8(np.where(img == 0, 1, 0))
col_counts = cv2.reduce(mask, 0, cv2.REDUCE_SUM, dtype=cv2.CV_32SC1)
row_counts = cv2.reduce(mask, 1, cv2.REDUCE_SUM, dtype=cv2.CV_32SC1)
print "Column counts: ", col_counts.flatten().tolist()
print "Row counts: ", row_counts.flatten().tolist()
示例输出:
Column counts: [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 2, 1, 1, 1, 0, 2, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 2, 0, 1, 1, 1, 0, 0, 2, 1, 3, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 2, 0, 1, 0, 0, 0, 0, 2, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1]
Row counts: [0, 0, 1, 0, 0, 0, 2, 1, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 2, 0, 0, 0, 1, 1, 2, 2, 2, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 2, 1, 1, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 2, 1, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 2]