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

Cara menggunakan Python untuk mengesan bentuk pada gambar

PHPz
PHPzasal
2023-08-18 19:57:23931semak imbas

Cara menggunakan Python untuk mengesan bentuk pada gambar

Cara menggunakan Python untuk menjejak bentuk pada imej

Pengenalan:
Pemprosesan imej ialah bahagian penting dalam bidang penglihatan komputer, dan menjejak bentuk tertentu dalam imej adalah salah satu tugas biasa. Artikel ini akan memperkenalkan cara menggunakan Python dan perpustakaan OpenCV untuk menjejak bentuk dalam gambar, dan memberikan contoh kod yang sepadan.

1. Penyediaan:
Sebelum mula menulis kod, kita perlu memasang perpustakaan Python dan OpenCV, dan menyediakan gambar yang mengandungi bentuk sasaran sebagai input. Pertama, pastikan anda telah memasang Python Anda boleh memuat turun dan memasang versi yang sesuai untuk sistem pengendalian anda di tapak web rasmi Python. Seterusnya, kita perlu memasang perpustakaan OpenCV menggunakan arahan pip. Buka terminal (atau baris arahan) dan masukkan arahan berikut untuk memasang OpenCV:

pip install opencv-python

2. Import perpustakaan dan baca imej:
Sebelum menulis kod secara rasmi, kita perlu mengimport perpustakaan yang sepadan terlebih dahulu. Python menyediakan pernyataan import untuk mengimport perpustakaan yang anda perlu gunakan. Dalam tugasan ini, kita perlu mengimport perpustakaan cv2 (iaitu antara muka Python ke perpustakaan OpenCV). Selain itu, kami juga perlu mengimport perpustakaan numpy untuk menyokong operasi tatasusunan. Berikut ialah kod untuk mengimport perpustakaan yang diperlukan:

import cv2
import numpy sebagai np

Seterusnya, kita perlu membaca imej dan menukarnya kepada skala kelabu. Imej skala kelabu lebih mudah diproses dan boleh mengurangkan jumlah pengiraan. Memandangkan kerja masa hadapan boleh mengubah suai imej asal, kami boleh menggunakan salinan untuk menyimpan imej skala kelabu. Berikut ialah kod untuk membaca imej dan menukarnya kepada imej skala kelabu:

imej = cv2.imread("input.jpg")
gray = cv2.cvtColor(imej, cv2.COLOR_BGR2GRAY)

3 penjejakan:
Sebelum melakukan pengesanan bentuk, kita perlu melakukan pengesanan bentuk terlebih dahulu. OpenCV menyediakan fungsi cv2.findContours() untuk mencari kontur dalam imej. Fungsi ini menerima imej terdua sebagai input dan mengembalikan senarai semua kontur dalam imej. Berikut ialah contoh kod untuk pengesanan bentuk:

ret, thresh = cv2.threshold(kelabu, 127, 255, 0)
kontur, hierarki = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.SIMP_APPROX)

kita boleh menggunakan fungsi cv2.approxPolyDP() untuk menganggarkan kontur dan menjadikannya lebih licin. Darjah penghampiran boleh diubah dengan melaraskan nilai epsilon parameter kedua bagi fungsi ini. Nilai epsilon yang kecil akan menghasilkan anggaran yang lebih tepat, manakala nilai epsilon yang besar akan menghasilkan anggaran yang lebih kasar. Berikut ialah contoh kod untuk anggaran bentuk:

epsilon = 0.04 * cv2.arcLength(contour, True)

approx = cv2.approxPolyDP(contour, epsilon, True)

Akhir sekali, kita boleh menggunakan cvs2.(draw) untuk Lukiskan bentuk yang dikesan pada imej asal. Berikut ialah contoh kod untuk melukis kontur:

cv2.drawContours(imej, [approx], 0, (0, 255, 0), 2)

Penjelasan kod:

Dalam kod di atas, ret ialah nilai Boolean untuk Menunjukkan sama ada operasi ambang berjaya. thresh ialah imej ambang yang digunakan untuk pengesanan kontur. kontur ialah senarai yang mengandungi semua kontur yang dikesan. hierarki ialah maklumat hierarki garis besar. epsilon ialah parameter yang digunakan untuk menganggarkan kontur. lebih kurang ialah kontur anggaran. Akhir sekali, fungsi cv2.drawContours() digunakan untuk melukis kontur.

4. Paparan dan hasil:

Selepas melengkapkan pengesanan bentuk, kami boleh memaparkan imej hasil dan menyimpannya sebagai fail baharu. Berikut ialah contoh kod untuk memaparkan dan menyimpan hasil:

cv2.imshow("Result", imej)

cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.imwrite("output.jpg", imej )

Penjelasan kod:

Dalam kod di atas, fungsi cv2.imshow() digunakan untuk memaparkan imej hasil. cv2.waitKey(0) digunakan untuk menunggu pengguna menekan sebarang kekunci sebelum menutup tetingkap imej. Fungsi cv2.destroyAllWindows() digunakan untuk menutup semua tetingkap yang terbuka. Akhir sekali, fungsi cv2.imwrite() digunakan untuk menyimpan imej yang terhasil.

Ringkasan:

Artikel ini memperkenalkan cara menggunakan Python dan perpustakaan OpenCV untuk menjejak bentuk dalam gambar. Kami mula-mula belajar tentang penyediaan, kemudian mengimport perpustakaan yang diperlukan dan membaca imej. Seterusnya, kami melakukan pengesanan bentuk dan penjejakan untuk menjejak bentuk sasaran dengan menganggarkan kontur dan melukis kontur. Akhir sekali, kami menunjukkan imej yang terhasil dan menyimpan hasil penjejakan.

Berikut ialah contoh kod lengkap:

import cv2
import numpy as np

image = cv2.imread("input.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

ret, thresh = cv2.threshold(gray, 127, 255, 0)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

for contour in contours:
    epsilon = 0.04 * cv2.arcLength(contour, True)
    approx = cv2.approxPolyDP(contour, epsilon, True)
    cv2.drawContours(image, [approx], 0, (0, 255, 0), 2)

cv2.imshow("Result", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.imwrite("output.jpg", image)

Saya harap artikel ini dapat membantu pembaca memahami cara menggunakan Python dan perpustakaan OpenCV untuk menjejak bentuk dalam gambar. Dengan mempelajari dan menggunakan contoh kod yang disediakan dalam artikel ini, pembaca boleh melaksanakan tugas pengesanan bentuk dengan mudah dan memainkan peranan dalam aplikasi pemprosesan imej.

Atas ialah kandungan terperinci Cara menggunakan Python untuk mengesan 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