2

我有一个 3 通道 numpy 数组,即一个图像,我想屏蔽一些区域,然后计算未屏蔽区域的平均值。当我将我的 numpy 数组转换为掩码的 numpy 数组时,我总是收到以下错误:

raise MaskError(msg % (nd, nm))
numpy.ma.core.MaskError: Mask and data not compatible: data size is 325080, mask size is 108360.

我的数组(图像)形状是:(301, 360, 3)供参考。我通过创建一个重复的零数组来创建我的掩码,然后1在掩码上绘制一个 's (True) 的多边形形状。

我的代码是:

mask = np.zeros((src.shape[0], src.shape[1], 1), dtype='uint8')
cv2.drawContours(mask, [np.array(poly)], -1, (1,), -1)
msrc = np.ma.array(src, mask=mask, dtype='uint8')  # error on this line
mean = np.ma.mean(msrc)

我做错了什么,如何修复它以在 numpy 中成功创建屏蔽数组?

4

1 回答 1

0

如评论中所述,numpy 不考虑图像,它只是数学。OpenCV 将数学抽象为简单的图像处理。
要使用 OpenCV 屏蔽图像,您可以使用
masked_img = cv2.bitwise_and(src,src,mask=mask).
文档

于 2019-07-04T11:34:16.483 回答