代码如下:
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
计算均值即可