计算图像的每行和每列的黑色像素数

时间:2017-07-25 10:40:05

标签: python opencv

我是openCV和Python的新手。我想计算每行和每列图像的黑色像素总数。任何人都可以给出提示或帮助吗?

2 个答案:

答案 0 :(得分:2)

Here你可以找到计算数组中非零元素的countNonZero函数,在你的情况下它将是一行或一列。

cv2.countNonZero(src) → retval

PS:该函数将返回非黑色像素的数量,您要做的就是从像素数(分辨率或行* cols)中减去该数字。

答案 1 :(得分:2)

正如Miki建议的那样,你可以利用cv2.reduce

  1. 使用numpy.where创建一个包含1的黑色像素的面具,以及任何其他强度的0

  2. 现在调用cv2.reduce两次(每个轴一次),执行REDUCE_SUM,并将输出数据类型设置为32位整数。

  3. 代码:

    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]