Comment utiliser Python pour effectuer une transformation de Hough sur des images
Résumé :
La transformation de Hough est une technique de traitement d'image couramment utilisée pour détecter des lignes droites ou certaines formes spécifiques dans les images. Cet article expliquera comment utiliser la bibliothèque OpenCV en Python pour implémenter la transformation de Hough et expliquera en détail son processus d'implémentation à travers des exemples de code.
Introduction :
La transformée de Hough est une technique de traitement d'image proposée par Hough en 1962 et était à l'origine utilisée pour détecter des lignes droites dans les images. Par la suite, la transformée de Hough a été largement utilisée et étendue pour détecter des cercles, des ellipses et d’autres formes. Dans le domaine de la vision par ordinateur et du traitement d’images, la transformée de Hough est un outil très important.
1. Principe de Hough Transform
Le principe de base de Hough Transform est de convertir chaque pixel de l'image en une courbe (ou un espace de paramètres) dans l'espace de coordonnées polaires (Hough Space). Pour une ligne droite, les deux paramètres représentent respectivement la distance et l’angle de la ligne droite. En sélectionnant des points dans l'espace des paramètres et en trouvant des intersections sur les courbes, toutes les lignes droites de l'image originale peuvent être obtenues.
2. Introduction à la bibliothèque OpenCV
OpenCV est une bibliothèque de logiciels open source de vision par ordinateur et d'apprentissage automatique qui fournit une richesse d'algorithmes de traitement d'images et de vision par ordinateur. Il s'agit de l'une des bibliothèques de traitement d'images les plus populaires en Python, avec de puissantes fonctions de traitement d'images et une interface facile à utiliser. Cet article utilisera la bibliothèque OpenCV pour implémenter la transformation de Hough.
3. Utilisez Python pour effectuer la transformation Hough
Ce qui suit utilise un exemple spécifique pour montrer comment utiliser Python pour effectuer la transformation Hough sur des images.
Tout d'abord, nous devons importer les bibliothèques requises :
import cv2 import numpy as np import matplotlib.pyplot as plt
Ensuite, lire et afficher l'image originale :
image = cv2.imread("image.jpg") plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) plt.axis('off') plt.show()
Ensuite, convertir l'image en niveaux de gris :
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
Ensuite, effectuez une détection des contours sur l'image :
edges = cv2.Canny(gray, 50, 150)
Ensuite, effectuez la transformation de Hough :
lines = cv2.HoughLines(edges, 1, np.pi/180, 200)
Parcourez et tracez les lignes droites détectées :
for line in lines: rho, theta = line[0] a = np.cos(theta) b = np.sin(theta) x0 = a*rho y0 = b*rho x1 = int(x0 + 1000*(-b)) y1 = int(y0 + 1000*(a)) x2 = int(x0 - 1000*(-b)) y2 = int(y0 - 1000*(a)) cv2.line(image, (x1, y1), (x2, y2), (0, 0, 255), 2)
Enfin, affichez l'image traitée :
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) plt.axis('off') plt.show()
Conclusion :
Cet article détaille comment utiliser la bibliothèque OpenCV en Python pour transformer des images. transformer. Grâce à l'exemple de code, nous pouvons voir la puissante capacité de la transformation de Hough à détecter des lignes droites. En plus des lignes droites, OpenCV fournit également des implémentations de transformation de Hough d'autres formes, que les lecteurs peuvent apprendre et essayer davantage.
Référence :
Annexe :
Voir le bloc de code ci-dessous pour le code complet :
import cv2 import numpy as np import matplotlib.pyplot as plt # 读取并显示原始图像 image = cv2.imread("image.jpg") plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) plt.axis('off') plt.show() # 将图像转换为灰度图像 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 对图像进行边缘检测 edges = cv2.Canny(gray, 50, 150) # 进行霍夫变换 lines = cv2.HoughLines(edges, 1, np.pi/180, 200) # 遍历并绘制检测到的直线 for line in lines: rho, theta = line[0] a = np.cos(theta) b = np.sin(theta) x0 = a*rho y0 = b*rho x1 = int(x0 + 1000*(-b)) y1 = int(y0 + 1000*(a)) x2 = int(x0 - 1000*(-b)) y2 = int(y0 - 1000*(a)) cv2.line(image, (x1, y1), (x2, y2), (0, 0, 255), 2) # 显示处理后的图像 plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) plt.axis('off') plt.show()
Remarque : Veuillez remplacer le "image.jpg"
dans le code par votre propre chemin d'image.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!