OpenCV中的掩膜类型错误问题:均值

10
我正在尝试对我的画框进行区域遮罩,以便能够获得形状的平均值。我的代码如下:
for h, cnt in enumerate(contours):
    mask = np.zeros(source_img.shape, np.uint8)
    cv2.drawContours(mask, [cnt], 0, 255, -1)
    print mask
    print mask.dtype
    mean = cv2.mean(source_img, mask=mask)

然而,运行此代码时,我得到了error: (-215) mask.empty() || mask.type() == CV_8U in function mean的错误提示。
包含在内的打印语句返回的是uint8。掩模本身的打印输出显示出一个非空的numpy数组,其值为0和255。还有其他想法吗?

糟糕,忘记包含那一部分了。不是空的。drawContours工作得很好,并且掩码的打印输出显示其中有0/255值的numpy数组。我会更新Q。 - Lark
这对于你的所有迭代都有效吗?打印出mask.sum()或其他内容以了解情况...如果其中一个为零,那就是问题所在。 - Miki
它只在第一次迭代时运行并中断,但掩码的总和非零。 - Lark
1个回答

13

新手错误:事实证明,我从中提取形状的源图像是一张彩色图片,这意味着source_img.shape()显示为(480, 640, 3)。因此,尽管正确设置了掩码的类型,它仍然是一个三通道图像,而需要的是二通道图像。

通过以下方式修复:

mask = np.zeros(source_img.shape[:2], np.uint8)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接