Heim  >  Artikel  >  Backend-Entwicklung  >  So führen Sie mit Python eine Formerkennung für Bilder durch

So führen Sie mit Python eine Formerkennung für Bilder durch

王林
王林Original
2023-08-19 09:53:072772Durchsuche

So führen Sie mit Python eine Formerkennung für Bilder durch

Wie man mit Python die Formerkennung von Bildern durchführt

Mit der rasanten Entwicklung der Computer Vision legen die Menschen immer mehr Wert darauf, Computerprogramme zur automatischen Analyse und Verarbeitung von Bildern zu verwenden. Unter ihnen ist die Erkennung der Form von Objekten in Bildern eine wichtige Technologie. In diesem Artikel wird anhand von Beispielcode erläutert, wie Sie mit der Programmiersprache Python und der OpenCV-Bibliothek Formen in Bildern erkennen.

Python ist eine leicht zu erlernende und benutzerfreundliche Programmiersprache, während OpenCV eine im Bereich Computer Vision weit verbreitete Open-Source-Bibliothek ist, die eine Reihe von Bildverarbeitungs- und Bilderkennungsfunktionen bietet.

Zuerst müssen Sie Python- und OpenCV-Bibliotheken installieren. Sie können sie mit dem folgenden Befehl in der Windows-Umgebung installieren:

pip install opencv-python

Als nächstes teilen wir den Beispielcode in vier Schritte auf: Bild laden, Bildverarbeitung, Formerkennung und Formerkennung .

Schritt 1: Laden Sie das Bild

Bevor wir mit der Verarbeitung beginnen, müssen wir ein zu verarbeitendes Bild laden. Sie können die Funktion imread() von OpenCV verwenden, um Bilddateien zu lesen: 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)

Schritt 2: Bildverarbeitung

Um die Formen im Bild besser zu erkennen, müssen wir einige Bildverarbeitungsvorgänge durchführen. Zuerst konvertieren wir das Farbbild in Graustufen:

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)

Dann binarisieren wir das Graustufenbild, um es in Schwarzweiß umzuwandeln:

rrreee

Schritt 3: Formerkennung

Als nächstes können wir OpenCVs findContours( ) Funktion zum Erkennen aller Konturen im Bild. Eine Kontur ist eine Kurve, die aus einer Reihe aufeinanderfolgender Punkte besteht und die Kante eines Objekts beschreibt. 🎜rrreee🎜Schritt 4: Formerkennung🎜🎜Schließlich können wir die Formen im Bild anhand der erkannten Konturen identifizieren. In diesem Beispiel gleichen wir die erkannten Konturen mit vordefinierten Formen ab und bestimmen den Formtyp. 🎜rrreee🎜Schließlich können wir das Ergebnisbild über die Funktion imshow() anzeigen, und die Funktion waitKey() wartet auf Tastatureingaben, damit das Fenster angezeigt bleibt: 🎜rrreee 🎜Zusammenfassung🎜🎜 In diesem Artikel wird erläutert, wie Sie mithilfe von Python und der OpenCV-Bibliothek eine Formerkennung für Bilder durchführen. Durch die vier Schritte Laden von Bildern, Bildverarbeitung, Formerkennung und Formerkennung können wir die Erkennung von Formen in Bildern durch Schreiben von einfachem Code realisieren. Diese Methode ist sehr nützlich für Entwickler, die sich mit Computer Vision und Bildverarbeitung befassen, und kann in verschiedenen Szenarien angewendet werden, z. B. in der industriellen Automatisierung, Robotervision, intelligenten Überwachung und anderen Bereichen. 🎜🎜Codebeispiel: 🎜rrreee🎜Ich hoffe, dieser Artikel kann Ihnen dabei helfen, mehr über die Verwendung von Python und OpenCV zur Bildformerkennung zu erfahren. Indem Sie diese Technologien gründlich erlernen und erkunden, können Sie sie in Ihren eigenen Projekten anwenden, um mehr Funktionen und Anwendungen zu erreichen. 🎜

Das obige ist der detaillierte Inhalt vonSo führen Sie mit Python eine Formerkennung für Bilder durch. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn