cv2 计算轮廓内像素点均值


代码如下:

import numpy as np
import cv2

def cal_mean_of_mask(img, contours):
    """
    输入一张图像,获取mask区域内的均值
    img : [H, W, C]
    contours : 轮廓点
    return : [每个轮廓的均值]
    """
    ret = []
    for i in range(len(contours)):
        zero_mask = np.zeros(img.shape[:2], dtype=np.uint8)
        cv2.drawContours(zero_mask, contours, i, 255, -1)
        coords = np.nonzero(zero_mask)
        ret.append(np.mean(data_array[coords]))
    return ret

思路:

定义值为 0 的, shape 同 原 img 的 mask, 在mask上绘制值为255的实心区域(轮廓内), 这样就得到了轮廓所表示的 mask 区域, 再利用 np.nonzero 函数获取所有非0点索引, 便可直接使用numpy索引data_array[coords]得到 mask 区域内的像素值, 最后使用 np.mean 计算均值即可

猜你喜欢

转载自blog.csdn.net/qq_29304033/article/details/126707406