Sto cercando di implementare l'algoritmo trovato here in python con OpenCV. Sono nuovo di OpenCV così nudo con me.Python OpenCV Gerarchia ad albero Contour
Sto cercando di implementare la parte dell'algoritmo che rimuove i limiti del bordo irrilevanti in base al numero di limiti interni che hanno.
- Se la corrente di confine bordo ha esattamente uno o due interni confini bordo, i confini interni possono essere ignorati
- Se la corrente di confine comune ha più di due confini bordo interne, può essere ignorato
Ho problemi a determinare la struttura ad albero dei contorni che ho estratto dall'immagine.
La mia fonte di corrente:
import cv2
# Load the image
img = cv2.imread('test.png')
cv2.copyMakeBorder(img, 50,50,50,50,cv2.BORDER_CONSTANT, img, (255,255,255))
# Split out each channel
blue = cv2.split(img)[0]
green = cv2.split(img)[1]
red = cv2.split(img)[2]
# Run canny edge detection on each channel
blue_edges = cv2.Canny(blue, 1, 255)
green_edges = cv2.Canny(green, 1, 255)
red_edges = cv2.Canny(red, 1, 255)
# Join edges back into image
edges = blue_edges | green_edges | red_edges
# Find the contours
contours,hierarchy = cv2.findContours(edges.copy(),cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
# For each contour, find the bounding rectangle and draw it
for cnt in contours:
x,y,w,h = cv2.boundingRect(cnt)
cv2.rectangle(edges,(x,y),(x+w,y+h),(200,200,200),2)
# Finally show the image
cv2.imshow('img',edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
ho pensato che utilizzando RETR_TREE mi avrebbe dato un bel array nidificato dei contorni, ma che non sembra essere il caso. Come posso recuperare la struttura ad albero dei miei contorni?
potete trovare maggiori dettagli su gerarchia su questo articolo: http://opencvpython.blogspot.com/2013/01/contours-5-hierarchy.html –