Extraire de simples contours de lignes de Savant bords
Je voudrais extraire les contours d'une image, exprimée comme une séquence de coordonnées de points.
Avec Canny
je suis en mesure de produire une image binaire qui contient uniquement les bords de l'image. Ensuite, je suis en train d'utiliser findContours
pour extraire les contours. Les résultats ne sont pas OK, si.
Pour chaque bord, j'ai souvent eu 2 lignes, comme si elle était considérée comme une très fine de la zone.
Je voudrais simplifier mes contours afin que je puisse les attirer comme des lignes simples. Ou peut-être les extraire avec une autre fonction que de produire directement le résultat correct serait encore mieux.
J'ai eu un coup d'oeil sur la documentation de OpenCV, mais j'ai été pas en mesure de trouver quelque chose d'utile, mais je suppose que je ne suis pas le premier avec un problème similaire. Est-il une fonction ou une méthode que je pourrais utiliser?
Voici le code Python que j'ai écrit jusqu'à présent:
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)
Le facteur d'échelle est utilisé pour mettre en évidence les doubles lignes de contours.
Voici les liens vers les images:
- Lena niveaux de gris
- Bords extrait avec
Canny
- Les Contours: Zoom 10x, où vous pouvez voir la mal résultats produits par
findContours
Toute suggestion sera grandement apprécié.
le flou de l'image pour réduire les bruits
Je ne pense pas que c'est une question de bruit dans l'image. Si vous regardez les bords extrait avec Futé ils sont OK. Avec HoughLines je ne serais pas capable de gérer les courbes dans l'image, n'est-ce pas?
oui bien sûr, vous auriez, houghlines a quelques paramètres que vous devriez jouer avec eux et de trouver votre format souhaité, comme dans les courbes, vous obtiendrez plusieurs lignes! les lignes sont essentiellement des start-point final! nous travaillons avec de détection de voie sur une route et c'est ce que nous utilisons.
OriginalL'auteur Muffo | 2013-08-06
Vous devez vous connecter pour publier un commentaire.
Si je vous comprends bien, votre question n'a rien à voir avec la recherche de lignes dans un paramétrique (Hough transformer).
C'est plutôt un problème avec le
findContours
méthode retournant plusieurs contours pour une seule ligne.C'est parce que Savant est un bord détecteur - ce qui signifie qu'il est le filtre à l'écoute de l'image de l'intensité de gradient qui se produit sur les deux côtés d'une ligne.
Si votre question est plus proche de: “comment puis-je convertir faible niveau de fonctionnalités de pointe pour seule ligne?”, ou peut-être: “comment puis-je naviguer sur les contours de la hiérarchie afin de détecter des lignes simples?"
C'est assez souvent le sujet commun - et c'est là un précédent post qui a proposé une solution:
OpenCV conversion Savant bords à contours
OriginalL'auteur tiluki