Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menggunakan Python untuk melakukan pengecaman bentuk pada gambar

Cara menggunakan Python untuk melakukan pengecaman bentuk pada gambar

王林
王林asal
2023-08-19 09:53:072772semak imbas

Cara menggunakan Python untuk melakukan pengecaman bentuk pada gambar

Cara menggunakan Python untuk melaksanakan pengecaman bentuk pada gambar

Dengan perkembangan pesat penglihatan komputer, orang ramai semakin menumpukan perhatian untuk menggunakan program komputer untuk menganalisis dan memproses imej secara automatik. Antaranya, pengecaman bentuk objek dalam imej merupakan teknologi yang penting. Artikel ini akan memperkenalkan cara menggunakan bahasa pengaturcaraan Python dan perpustakaan OpenCV untuk mengenali bentuk dalam imej, dengan kod sampel.

Python ialah bahasa pengaturcaraan yang mudah dipelajari dan mudah digunakan, manakala OpenCV ialah perpustakaan sumber terbuka yang digunakan secara meluas dalam bidang penglihatan komputer Ia menyediakan satu siri pemprosesan imej dan fungsi pengecaman imej.

Pertama, anda perlu memasang perpustakaan Python dan OpenCV Anda boleh memasangnya dalam persekitaran Windows melalui arahan berikut:

pip install opencv-python

Seterusnya, kami membahagikan kod sampel kepada empat langkah: memuatkan imej, pemprosesan imej, pengesanan bentuk dan pengecaman bentuk. .

Langkah 1: Muatkan imej

Sebelum memulakan pemprosesan, kita perlu memuatkan imej untuk diproses. Anda boleh menggunakan fungsi imread() OpenCV untuk membaca fail imej: 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)

Langkah 2: Pemprosesan imej

Untuk mengesan bentuk dalam imej dengan lebih baik, kami perlu melakukan beberapa operasi pemprosesan imej . Mula-mula, kita akan menukar imej warna kepada skala kelabu:

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)

Kemudian, kita binarikan imej skala kelabu untuk menukarnya kepada hitam dan putih:

rrreee

Langkah 3: Pengesanan Bentuk

Seterusnya, Kita boleh menggunakan findContours OpenCV ) berfungsi untuk mengesan semua kontur dalam imej. Kontur ialah lengkungan yang dibentuk oleh satu siri titik berturut-turut yang menerangkan tepi sesuatu objek. 🎜rrreee🎜Langkah 4: Pengecaman Bentuk🎜🎜Akhir sekali, kita boleh mengenal pasti bentuk dalam imej melalui kontur yang dikesan. Dalam contoh ini, kami memadankan kontur yang dikesan dengan bentuk yang dipratentukan dan menentukan jenis bentuk. 🎜rrreee🎜Akhir sekali, kami boleh memaparkan imej hasil melalui fungsi imshow(), dan fungsi waitKey() menunggu input papan kekunci untuk memastikan tetingkap dipaparkan: 🎜rrreee 🎜Ringkasan🎜🎜 Artikel ini menerangkan cara melaksanakan pengecaman bentuk pada imej menggunakan Python dan perpustakaan OpenCV. Melalui empat langkah memuatkan imej, pemprosesan imej, pengesanan bentuk dan pengecaman bentuk, kita boleh merealisasikan pengecaman bentuk dalam imej dengan menulis kod mudah. Kaedah ini sangat berguna untuk pembangun yang terlibat dalam penglihatan komputer dan pemprosesan imej, dan boleh digunakan dalam pelbagai senario, seperti automasi industri, penglihatan robot, pemantauan pintar dan bidang lain. 🎜🎜Contoh Kod: 🎜rrreee🎜Semoga artikel ini dapat membantu anda mengetahui lebih lanjut tentang cara menggunakan Python dan OpenCV untuk pengecaman bentuk imej. Dengan mempelajari dan meneroka teknologi ini secara mendalam, anda boleh menggunakannya dalam projek anda sendiri untuk mencapai lebih banyak ciri dan aplikasi. 🎜

Atas ialah kandungan terperinci Cara menggunakan Python untuk melakukan pengecaman bentuk pada gambar. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn