python中的不规则区域掩蔽

时间:2016-07-28 20:36:52

标签: python opencv

我想掩盖轮廓内的区域。我的代码如下:

cnt = np.array(list((y, x) for x in X for y in Y))
mask = np.zeros(np.shape(b_contour_map),np.uint8)
cv2.drawContours(mask,[cnt],0,1)

我根据两个点坐标向量创建cnt,打印时看起来像:

[[252 251]
 [252 251]
 [252 251]
 ...,
 [249 251]
 [249 251]
 [252 251]]

b_contour_map是包含结构轮廓点的图像。 当我显示蒙版时,我得到了结构的边界框,但我只需要知道结构的不规则轮廓内的点(由cnt定义)。有没有办法做到这一点?

enter image description here

1 个答案:

答案 0 :(得分:0)

事实证明,点的顺序是问题。通过实施我得到了正确的结果:

cnt = zip(Y, X)
cnt.sort(key=lambda x: (-x[0], x[[1]]))
maskIm = Image.new('L', (b_contour_map.shape[[1]], b_contour_map.shape[0]), 0)
ImageDraw.Draw(maskIm).polygon(cnt, outline=1, fill=1)
mask = np.array(maskIm) <p>

Result