在3通道数组上创建Numpy蒙版数组永远无法正常工作

时间:2019-07-04 07:02:46

标签: python numpy opencv masked-array

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

  

提高MaskError(msg%(nd,nm))
  numpy.ma.core.MaskError:掩码和数据不兼容:数据大小为325080,掩码大小为108360。

我的数组(图像)形状为:(301, 360, 3)供参考。我通过创建一个重复的零数组来创建蒙版,然后在蒙版上绘制1(真)的多边形。

我的代码是:

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中成功创建蒙版数组?

1 个答案:

答案 0 :(得分:0)

如评论中所述,numpy不考虑图像,只是数学。 OpenCV将该数学抽象为易于图像处理的内容。
要使用OpenCV遮罩图像,可以使用
masked_img = cv2.bitwise_and(src,src,mask=mask)
 (docs