首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何填充opencv的空白线

如何填充opencv的空白线
EN

Stack Overflow用户
提问于 2021-05-07 12:08:09
回答 4查看 813关注 0票数 2

我有这样的形象:

在我应用了一些处理(例如cv2.Canny() )之后,现在看起来是这样的:

你可以看到黑线变成了空心的。我试过侵蚀和膨胀,但如果我做了很多次,两个入口将关闭(意思是成为连接线或封闭轮廓)。

如何使这些线条像下面的图像一样坚固,同时保持两个入口不受影响?

更新1

我用几张照片测试了下面的答案,但是代码似乎是自定义的,只能处理这一张特定的图片。由于SOF的限制,我不能上传大于2MB的照片,所以为了便于测试,我将它们上传到我的Microsoft OneDrive文件夹中。

https://1drv.ms/u/s!Asflam6BEzhjgbIhgkL4rt1NLSjsZg?e=OXXKBK

更新2

我找到@fmw42 42的帖子作为回答,因为他的回答是最详细的。它没有回答我的问题,但指出了正确的方式处理迷宫,这是我的最终目标。我喜欢他回答问题的方法,首先告诉你每一步应该做什么,这样你才能清楚地知道如何完成任务,然后自始至终提供完整的代码示例。非常有帮助。

由于SOF的限制,我只能得到一个答案。如果允许多个答案,我也会选择Shamshisaz.Navid的答案。他的回答不仅指向了解决问题的正确方向,而且可视化的解释对我来说也很有效~!我想,对于所有试图理解为什么需要每一行代码的人来说,这同样有效。此外,他在评论中跟进了我的问题,这使得SOF有一点交互性:)

Ann Zen的答案中的阈值跟踪栏也是人们快速找到最优值的一个非常有用的提示。

EN

Stack Overflow用户

发布于 2021-05-07 14:55:03

您可以尝试一个简单的阈值来检测迷宫的线条,因为它们很方便地是黑色的:

代码语言:javascript
运行
复制
import cv2

img = cv2.imread("maze.jpg")
gray = cv2.cvtColor(img, cv2.BGR2GRAY)
_, thresh = cv2.threshold(gray, 60, 255, cv2.THRESH_BINARY)
cv2.imshow("Image", thresh)
cv2.waitKey(0)

输出:

您可以使用轨迹栏自己调整阈值:

代码语言:javascript
运行
复制
import cv2

cv2.namedWindow("threshold")
cv2.createTrackbar("", "threshold", 0, 255, id)

img = cv2.imread("maze.jpg")

while True:
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    t = cv2.getTrackbarPos("", "threshold")
    _, thresh = cv2.threshold(gray, t, 255, cv2.THRESH_BINARY)
    cv2.imshow("Image", thresh)
    if cv2.waitKey(1) & 0xFF == ord("q"): # If you press the q key
        break

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

https://stackoverflow.com/questions/67434707

复制
相关文章

相似问题

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