Maison >développement back-end >Tutoriel Python >Comment utiliser Python pour effectuer une reconnaissance de forme sur des images

Comment utiliser Python pour effectuer une reconnaissance de forme sur des images

王林
王林original
2023-08-19 09:53:072879parcourir

Comment utiliser Python pour effectuer une reconnaissance de forme sur des images

Comment utiliser Python pour effectuer une reconnaissance de forme sur des images

Avec le développement rapide de la vision par ordinateur, les gens accordent de plus en plus d'attention à l'utilisation de programmes informatiques pour analyser et traiter automatiquement les images. Parmi elles, la reconnaissance de la forme des objets dans les images constitue une technologie importante. Cet article explique comment utiliser le langage de programmation Python et la bibliothèque OpenCV pour reconnaître les formes dans les images, avec un exemple de code.

Python est un langage de programmation facile à apprendre et à utiliser, tandis qu'OpenCV est une bibliothèque open source largement utilisée dans le domaine de la vision par ordinateur. Elle fournit une série de fonctions de traitement et de reconnaissance d'images.

Tout d'abord, vous devez installer les bibliothèques Python et OpenCV. Vous pouvez les installer dans l'environnement Windows via la commande suivante :

pip install opencv-python

Ensuite, nous divisons l'exemple de code en quatre étapes : chargement de l'image, traitement de l'image, détection de forme et reconnaissance de forme. .

Étape 1 : Charger l'image

Avant de commencer le traitement, nous devons charger une image à traiter. Vous pouvez utiliser la fonction imread() d'OpenCV pour lire les fichiers image : imread()函数来读取图像文件:

import cv2

# 加载图像
image = cv2.imread('image.jpg')

第二步:图像处理

为了更好地检测出图像中的形状,我们需要进行一些图像处理操作。首先,我们将把彩色图像转换为灰度图像:

# 转换为灰度图像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

然后,我们对灰度图像进行二值化处理,将其转换为黑白图像:

# 二值化处理
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

第三步:形状检测

接下来,我们可以使用OpenCV的findContours()函数来检测出图像中的所有轮廓。轮廓是由一系列连续的点构成的曲线,可以描述物体的边缘。

# 查找图像中的轮廓
contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

第四步:形状识别

最后,我们可以通过检测出的轮廓来识别图像中的形状。在本示例中,我们将检测出的轮廓与预定义的形状进行匹配,并判断形状类型。

for contour in contours:
    # 计算轮廓的周长
    perimeter = cv2.arcLength(contour, True)
    # 仅检测周长大于一定阈值的形状
    if perimeter > 50:
        # 进行多边形拟合
        approx = cv2.approxPolyDP(contour, 0.04 * perimeter, True)
        # 根据拟合出的多边形边数判断形状类型
        sides = len(approx)
        
        if sides == 3:
            shape = "三角形"
        elif sides == 4:
            shape = "四边形"
        elif sides == 5:
            shape = "五边形"
        else:
            shape = "其他"
            
        # 在图像上标记出形状
        cv2.drawContours(image, [approx], -1, (0, 255, 0), 2)
        cv2.putText(image, shape, (approx.ravel()[0], approx.ravel()[1]), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0), 2)

最后,我们可以通过imshow()函数显示结果图像,以及waitKey()

# 显示结果图像
cv2.imshow("Shapes", image)
cv2.waitKey(0)

Étape 2 : Traitement de l'image

Afin de mieux détecter les formes dans l'image, nous devons effectuer certaines opérations de traitement d'image. Tout d'abord, nous allons convertir l'image couleur en niveaux de gris :

import cv2

# 加载图像
image = cv2.imread('image.jpg')

# 转换为灰度图像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 二值化处理
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

# 查找图像中的轮廓
contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

for contour in contours:
    perimeter = cv2.arcLength(contour, True)
    if perimeter > 50:
        approx = cv2.approxPolyDP(contour, 0.04 * perimeter, True)
        sides = len(approx)
        
        if sides == 3:
            shape = "三角形"
        elif sides == 4:
            shape = "四边形"
        elif sides == 5:
            shape = "五边形"
        else:
            shape = "其他"
            
        cv2.drawContours(image, [approx], -1, (0, 255, 0), 2)
        cv2.putText(image, shape, (approx.ravel()[0], approx.ravel()[1]), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0), 2)

cv2.imshow("Shapes", image)
cv2.waitKey(0)

Ensuite, nous binarisons l'image en niveaux de gris pour la convertir en noir et blanc :

rrreee

Étape 3 : Détection de forme

Ensuite, nous pouvons utiliser findContours d'OpenCV ( ) pour détecter tous les contours de l'image. Un contour est une courbe formée par une série de points consécutifs qui décrit le bord d'un objet. 🎜rrreee🎜Étape 4 : Reconnaissance des formes🎜🎜Enfin, nous pouvons identifier les formes dans l'image grâce aux contours détectés. Dans cet exemple, nous faisons correspondre les contours détectés avec des formes prédéfinies et déterminons le type de forme. 🎜rrreee🎜Enfin, nous pouvons afficher l'image résultat via la fonction imshow(), et la fonction waitKey() attend la saisie au clavier pour garder la fenêtre affichée : 🎜rrreee 🎜Résumé🎜🎜 Cet article explique comment effectuer une reconnaissance de forme sur des images à l'aide de Python et de la bibliothèque OpenCV. Grâce aux quatre étapes de chargement d'images, de traitement d'image, de détection de forme et de reconnaissance de forme, nous pouvons réaliser la reconnaissance de formes dans les images en écrivant un code simple. Cette méthode est très utile pour les développeurs engagés dans la vision par ordinateur et le traitement d'images, et peut être appliquée dans divers scénarios, tels que l'automatisation industrielle, la vision robotique, la surveillance intelligente et d'autres domaines. 🎜🎜Exemple de code : 🎜rrreee🎜J'espère que cet article pourra vous aider à en savoir plus sur la façon d'utiliser Python et OpenCV pour la reconnaissance de forme d'image. En apprenant et en explorant ces technologies en profondeur, vous pouvez les appliquer dans vos propres projets pour obtenir davantage de fonctionnalités et d'applications. 🎜

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn