Vorrei estrarre i contorni di un'immagine, espressa come una sequenza di coordinate punto.Estrarre contorni a linea singola dai bordi Canny
Con Canny
Sono in grado di produrre un'immagine binaria che contiene solo i bordi dell'immagine. Quindi, sto cercando di utilizzare findContours
per estrarre i contorni. I risultati non sono OK, però.
Per ciascun bordo ho spesso ottenuto 2 linee, come se fosse considerata un'area molto sottile. Mi piacerebbe semplificare i miei contorni in modo da poterli disegnare come linee singole. O forse estrarli con una funzione diversa che produce direttamente il risultato corretto sarebbe anche meglio.
Ho dato un'occhiata alla documentazione di OpenCV ma non sono riuscito a trovare nulla di utile, ma suppongo di non essere il primo con un problema simile. C'è qualche funzione o metodo che potrei usare?
ecco il codice Python che ho scritto finora:
def main():
img = cv2.imread("lena-mono.png", 0)
if img is None:
raise Exception("Error while loading the image")
canny_img = cv2.Canny(img, 80, 150)
contours, hierarchy = cv2.findContours(canny_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
contours_img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
scale = 10
contours_img = cv2.resize(contours_img, (0, 0), fx=scale, fy=scale)
for cnt in contours:
color = np.random.randint(0, 255, (3)).tolist()
cv2.drawContours(contours_img,[cnt*scale], 0, color, 1)
cv2.imwrite("canny.png", canny_img)
cv2.imwrite("contours.png", contours_img)
Il fattore di scala è usato per evidenziare le doppie linee dei contorni. Ecco i link alle immagini:
- Lena in scala di grigi
- Edges estratti con
Canny
- Contours: zoom 10x, dove si possono vedere le sbagliate risultati prodotti da
findContours
Qualsiasi il suggerimento sarà molto apprezzato
si dovrebbe usare HoughLines http://docs.opencv.org/modules/imgproc/doc/feature_detection.html#houghlines – Khashayar
sfocare l'immagine per ridurre i rumori – baci
Non penso che sia una questione di rumore in e immagine. Se osservi i bordi estratti con Canny, sono OK. Con HoughLines non sarei in grado di gestire linee curve nell'immagine, non è vero? – Muffo