在3通道阵列上创建numpy掩码阵列永远不起作用

2024-10-01 04:54:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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(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中成功创建屏蔽数组?你知道吗


Tags: 图像srcnumpydatasizeisnpmask
1条回答
网友
1楼 · 发布于 2024-10-01 04:54:25

正如评论中所说,numpy不考虑图像,它只是数学。OpenCV将数学抽象为简单的图像处理。
要使用OpenCV遮罩图像,可以使用
masked_img = cv2.bitwise_and(src,src,mask=mask).
docs

相关问题 更多 >