【发布时间】:2016-05-11 10:37:43
【问题描述】:
有没有一种简单直接的方法可以使用 opencv 3.1 python 从图像中提取内部轮廓(孔)?
我知道我可以使用“面积”作为条件。但是,如果我更改图像分辨率,“区域”就不一样了。
_, contours, hier_ = cv2.findContours(img,cv2.RETR_CCOMP,cv2.CHAIN_APPROX_SIMPLE)
areas = [cv2.contourArea(c) for c in millCnts]
max_area = np.max(areas)
Mask = np.ones(img.shape[:2], dtype="uint8") * 255
# I can do something like this (currently not working, just to show an example)
for c in contours:
if(( cv2.contourArea(c) > 8) and (cv2.contourArea(c)< 100000)):
cv2.drawContours(Mask ,[c],-1,0,1)
【问题讨论】:
-
您始终可以使用层次结构值来了解它们是否嵌套(孔)或不嵌套(外部)...不确定是否已经找到轮廓正确获取所有轮廓(您应该表明输出),但如果是这样,您可以通过检查相应的层次结构“h”来检查计数“c”是否嵌套,如果它是非负数,则为第四个值(
h[3])。 -
我认为我的主要问题是理解层次结构是如何工作的。输出数组很大:\ 在这种特殊情况下,它不起作用。限制应该在 8000 到 9000 之间!
-
millCnts在哪里定义?你能显示所有找到的轮廓的图像吗?