在Opencv Python中获取轮廓区域?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在Opencv Python中获取轮廓区域?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2154字,纯文字阅读大概需要4分钟。
内容图文
![在Opencv Python中获取轮廓区域?](/upload/InfoBanner/zyjiaocheng/702/ae9620aaa6e945af9ddda45be2a64cd2.jpg)
我使用自适应阈值技术来创建如下图片:
我使用的代码是:
image = cv2.adaptiveThreshold(image, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 45, 0)
然后,我使用此代码来获取轮廓:
cnt = cv2.findContours(image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)[0]
我的目标是使用外部轮廓内的所有像素生成蒙版,因此我想将对象内的所有像素填充为白色.我怎样才能做到这一点?
我已经尝试了下面的代码来创建一个掩码,但是在应用自适应阈值后,生成的掩码似乎与图像没有什么不同
mask = np.zeros(image.shape[:2], np.uint8)
cv2.drawContours(mask, cnt, -1, 255, -1)
解决方法:
你拥有的几乎是正确的.如果你看看你的阈值图像,它不起作用的原因是因为你的鞋子对象在图像中有间隙.具体来说,你所追求的是你希望鞋子的周长全部连接起来.如果发生这种情况,那么如果你提取最外部轮廓(这是你的代码正在做的),你应该只有一个代表对象外围的轮廓.一旦填写轮廓,那么你的鞋应该是完全坚固的.
由于鞋子的周边不完整和破损,这会导致白色区域断开.如果您使用findContours查找所有轮廓,它将只找到每个白色形状的轮廓而不是最外围的轮廓.因此,如果你尝试使用findContours,它会给你与原始图像相同的结果,因为你只是找到图像中每个白色区域的周长,然后用findContours填充这些区域.
您需要做的是确保图像完全关闭.我建议你做的是使用morphology一起关闭所有断开连接的区域,然后在这个新图像上运行findContours调用.具体来说,执行二进制形态学关闭.这样做的是它需要断开连接的白色区域,并确保它们连接在一起.使用形态学闭合,并可能使用类似7 x 7方形结构元素的东西来关闭鞋子.您可以将此结构元素视为白色区域之间的最小间隔,以将它们视为已连接.
因此,做这样的事情:
import numpy as np
import cv2
image = cv2.imread('...') # Load your image in here
# Your code to threshold
image = cv2.adaptiveThreshold(image, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 45, 0)
# Perform morphology
se = np.ones((7,7), dtype='uint8')
image_close = cv2.morphologyEx(image, cv2.MORPH_CLOSE, se)
# Your code now applied to the closed image
cnt = cv2.findContours(image_close, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)[0]
mask = np.zeros(image.shape[:2], np.uint8)
cv2.drawContours(mask, cnt, -1, 255, -1)
此代码基本上采用阈值图像,并将形态学闭合应用于此图像.之后,我们找到该图像的外部轮廓,并用白色填充它们. FWIW,我下载了你的thresholded图像,并自己尝试了.这就是我对你的形象的看法:
内容总结
以上是互联网集市为您收集整理的在Opencv Python中获取轮廓区域?全部内容,希望文章能够帮你解决在Opencv Python中获取轮廓区域?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。