我有这个代码,在我的图像中绘制轮廓,但我只需要外部轮廓:
import cv2
import numpy as np
camino= "C:/Users/Usuario/Documents/Deteccion de Objetos/123.jpg"
img = cv2.imread("C:/Users/Usuario/Documents/Deteccion de Objetos/123.jpg")
grises= cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
bordes= cv2.Canny(grises, 100, 250)
ctns = cv2.findContours(bordes, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
ctns = ctns[0] if len(ctns)==2 else ctns[1]
for c in ctns:
cv2.drawContours(img,[c], -1,(0,0,255),2)
print ('Numero de contornos es ', len(ctns))
texto= 'Contornos encontrados ' + str(len(ctns))
cv2.putText(img, texto, (10, 20), cv2.FONT_HERSHEY_SIMPLEX, 0.7,
(255, 0, 0), 1)
cv2.imshow('Bordes', bordes)
cv2.imshow('Imagen', img)
cv2.waitKey(0)
cv2.destroyAllWindows().
在这种情况下,我只需要检测10个轮廓,每个实体1个,但它检测450个轮廓。你知道吗
您可以尝试结合使用一些变形操作符进行整体填充。你知道吗
这是一种使用阈值+形态学操作+轮廓滤波的方法
首先我们将二值图像转换为灰度,然后是大津阈值(左),然后使用轮廓区域滤波去除虚线(右)
从这里我们执行变形关闭删除文本,然后反转图像(左)。我们找到轮廓并将所有小于阈值的轮廓填充为黑色(右)
接下来,我们再次反转并使用一个大的矩形内核执行morph open,以移除小的边和尖峰
最后我们找到等高线得到我们的结果
相关问题 更多 >
编程相关推荐