首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python OpenCV.fillPoly()没有填充我的多边形。为什么?

Python OpenCV.fillPoly()没有填充我的多边形。为什么?
EN

Stack Overflow用户
提问于 2020-09-09 17:25:29
回答 1查看 1.5K关注 0票数 1

使用OpenCV for ,我正在尝试获取图像中的噪声元素的掩码,以便稍后用作cv.inpaint()函数的输入。

给我一个灰度图像(二维矩阵,值从0到255)在input_mtx_8u变量中,带有噪声(非常低值的孤立多边形)。

到目前为止我所做的是:

  1. 得到梯度大于25:

的边

代码语言:javascript
复制
laplacian = cv2.Laplacian(input_mtx_8u, cv2.CV_8UC1)
lapl_bin, lapl_bin_val = cv2.threshold(laplacian, 25, 255, cv2.THRESH_BINARY)

  1. 获取工件

的轮廓

代码语言:javascript
复制
contours, _ = cv2.findContours(lapl_bin_val, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)

  1. 填充识别出的轮廓

代码语言:javascript
复制
filled_mtx = input_mtx_8u.copy()
cv2.fillPoly(filled_mtx, contours, (255, 255, 0), 4)

由于某些原因,我的“填充多边形”没有完全填充(见图)。我做错什么了?

EN

Stack Overflow用户

发布于 2020-09-09 20:53:18

正如@fmw42 42所指出的,填充等高线的解决方案是使用drawContours()而不是fillPoly()

我得到的最后的工作代码是:

代码语言:javascript
复制
# input_mtx_8u = 2D matrix with uint8 values from 0 to 255

laplacian = cv2.Laplacian(input_mtx_8u, cv2.CV_8UC1)
lapl_bin, lapl_bin_val = cv2.threshold(laplacian, 25, 255, cv2.THRESH_BINARY)

contours, _ = cv2.findContours(lapl_bin_val, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)

inpaint_mask = np.zeros(input_mtx_8u.shape, dtype=np.uint8)
for contour in contours:
    cv2.drawContours(inpaint_mask, [contour], -1, (255, 0, 0), thickness=-1)

# inpaint_mask = can be used as the mask for cv2.inpaint()

请注意,由于某种原因:

代码语言:javascript
复制
cv2.drawContours(input_mtx_cont, contours, -1, (255, 0, 0), thickness=-1)

不管用。一个人必须循环绘制等高线.

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63816633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档