terbuka

Visi Komputer Asasnya

Visi Komputer Asasnya
Opencv (Open Source Computer Vision Library) adalah modul Python yang digunakan untuk penglihatan komputer. OpenCV adalah modul sumber terbuka percuma yang mengandungi ratusan algoritma untuk melaksanakan pelbagai tugas. Apa pun dari pengecaman wajah hingga pengesanan gerakan boleh dilakukan menggunakan OpenCV. Walau bagaimanapun, dalam panduan ini, kita akan melihat asas OpenCV.

Pertama, mari pasang OpenCV:

pip3 memasang opencv-python

Baca dan Tunjukkan Imej

Perkara pertama yang perlu kita pelajari adalah membaca dan menulis gambar. Membaca fail gambar, memasukkan jalan penuh ke file atau nama fail (jika fail tersebut ada di folder python), dan menambahkan bendera dilakukan menggunakan cv2.membaca (). Bendera boleh mengambil nilai 1 (untuk gambar warna), 0 (untuk skala abu-abu), atau -1 (untuk gambar warna dengan saluran). Seseorang boleh menggunakan cv2.fungsi imshow () untuk menunjukkan gambar; di sini, dua argumen disahkan - nama untuk gambar dan gambar yang akan ditunjukkan. Seterusnya, kami menggunakan cv2.fungsi waitKey () untuk menunggu input papan kekunci; a 0 untuk cv2.fungsi waitKey (0) menyiratkan masa menunggu kekal. Sebaliknya, cv2.Fungsi destrAllWindows () akan menutup tingkap.

Ini akan membaca dan membuka gambar, dan menyimpan gambar sehingga anda menutupnya:

import cv2
gambar = cv2.imread ('LinuxLogo.jpg ', 1)
cv2.imshow ('gambar', gambar)
cv2.tungguKey (0)
cv2.hancurkanAllWindows ()

Tulis Imej

Kami menggunakan cv2.fungsi imwrite () untuk menyimpan gambar. Fungsi ini mengambil dua parameter - nama untuk menyimpan gambar dan gambar yang ingin anda simpan.

import cv2
gambar = cv2.imread ('kenal pasti.jpg ', -1)
cv2.imwrite ('save_image).png ', gambar)

Tangkap Video dari Kamera Web

Untuk merakam video, kita mulakan dengan menginisialisasi cv2.Fungsi VideoCapture (). Kami kemudian menggunakan gelung “while” untuk terus menangkap video. Walaupun pengguna tidak menekan tombol keluar, kami dapat membaca bingkai dan menunjukkannya menggunakan read () dan cv2.fungsi imshow (). Kami kemudian memasukkan kunci "rehat" untuk keluar dari gelung; dalam kes ini, nombor 27 adalah kunci ESC. Sekiranya pengguna menekan kekunci ESC, mereka keluar dari gelung. Setelah keluar dari gelung, perlu untuk melepaskan tangkapan.

import numpy sebagai np
import cv2
tangkapan = cv2.Rakaman Video (0)
sementara (Betul):
ret, bingkai = tangkapan.baca ()
cv2.imshow ('bingkai', bingkai)
sekiranya cv2.waitKey (1) & 0xFF == 27:
rehat
tangkap.pelepasan ()
cv2.hancurkanAllWindows ()

Memainkan Fail Video

Memainkan fail video adalah seperti menangkap video dari kamera web. Untuk melakukan ini, cv2.Fungsi VideoCapture () digunakan; nama fail video yang ingin anda mainkan kemudian ditambahkan ke fungsi. Gelung "while" digunakan lagi, dan kunci keluar, dalam hal ini, adalah kunci "s" pada papan kekunci. Ini akan membuka dan memainkan fail video dan menutupnya apabila pengguna menekan kekunci "s".

import numpy sebagai np
import cv2
tangkapan = cv2.VideoCapture ("Megamind.avi ")
sementara (Betul):
ret, bingkai = tangkapan.baca ()
cv2.imshow ('bingkai', bingkai)
sekiranya cv2.waitKey (1) & 0xFF == ord ("s"):
rehat
tangkap.pelepasan ()
cv2.hancurkanAllWindows ()

Menyimpan Fail Video

Menyimpan fail video memerlukan sedikit kerja lagi. The cv2.Fungsi VideoWriter () mengambil total 4 parameter - nama file output, kod FourCC, jumlah bingkai sesaat, dan ukuran bingkai. Selanjutnya, seseorang mesti menentukan kod FourCC, yang merupakan codec video menggunakan cv2.Fungsi VideoWriter_fourcc (). Menggunakan tangkapan.Dibuka (), kami membaca bingkai dan menulis bingkai output. Kami juga dapat menunjukkan bingkai menggunakan cv2.fungsi imshow (). Kemudian, kami menggunakan cv2.waitKey (1) & 0xFF == ord ('s') untuk menetapkan kunci keluar. Dalam hal ini, jika pengguna menekan tombol "s", mereka akan keluar dari gelung dan kemudian melepaskan tangkapan dan output dan menutup tingkap.

import numpy sebagai np
import cv2
tangkapan = cv2.Rakaman Video (0)
fourcc = cv2.VideoWriter_fourcc (* 'XVID')
output = cv2.VideoWriter ('output.avi ', fourcc, 30.0, (640,480))
semasa (tangkapan.Dibuka ()):
ret, bingkai = tangkapan.baca ()
pengeluaran.tulis (bingkai)
cv2.imshow ('bingkai', bingkai)
sekiranya cv2.waitKey (1) & 0xFF == ord ('s'):
rehat
tangkap.pelepasan ()
pengeluaran.pelepasan ()
cv2.memusnahkanAllWindows ()

Garis Lukisan, Lingkaran, Segi Empat, dan Teks

Perkara pertama yang akan kita pelajari ialah garis. Untuk menarik garis, kita hanya menggunakan cv2.fungsi garis (). Fungsi ini mengambil 5 argumen - video sumber, titik permulaan, titik akhir, warna, dan ketebalan garis. Dalam kes berikut, kami telah memutuskan untuk menarik sempadan segi empat tepat (terdiri daripada 4 garis):

import cv2
tangkapan = cv2.VideoCapture ('vtest.avi ')
Walaupun Betul:
ret, bingkai = tangkapan.baca ()
lebar = int (tangkapan.dapatkan (3))
tinggi = int (tangkapan.dapatkan (4))
garis1 = cv2.garis (bingkai, (0,0), (0, tinggi), (255, 255, 255), 10)
garis2 = cv2.garis (baris1, (0, 0), (lebar, 0), (255, 255, 255), 10)
garis3 = cv2.garis (garis2, (0, tinggi), (lebar, tinggi), (255, 255, 255), 10)
garis4 = cv2.garis (garis3, (lebar, 0), (lebar, tinggi), (255, 255, 255), 10)
cv2.imshow ('bingkai', baris4)
sekiranya cv2.waitKey (40) == ord ('q'):
rehat
tangkap.pelepasan ()
cv2.memusnahkanAllWindows ()

Seterusnya, kami akan melukis bulatan dan segi empat tepat pada video. Untuk melukis segi empat tepat, kita menggunakan cv2.fungsi segi empat tepat (), yang mengambil 5 argumen seperti garis. Untuk melukis bulatan, kita menggunakan fungsi cv2.bulatan (), yang juga mengambil 5 argumen - video sumber, titik tengah, jejari, warna, dan ketebalan.

import cv2
tangkapan = cv2.VideoCapture ('vtest.avi ')
Walaupun Betul:
ret, bingkai = tangkapan.baca ()
lebar = int (tangkapan.dapatkan (3))
tinggi = int (tangkapan.dapatkan (4))
segi empat tepat = cv2.segi empat tepat (bingkai, (150, 15), (650, 550), (0,0,0), 11)
cv2.bulatan (segi empat tepat, (250, 250), 60, (0,0,0), 11)
cv2.imshow ('bingkai', bingkai)
sekiranya cv2.waitKey (40) == ord ('q'):
rehat
tangkap.pelepasan ()
cv2.hancurkanAllWindows ()

Sekarang, mari kita tambahkan beberapa teks pada video yang kita ada. Untuk melakukan ini, kita perlu menentukan fon; di sini, kami memilih cv2.FONT_HERSHEY_SIMPLEX. Setelah fon dipilih, kita dapat menggunakan fungsi cv2.putText () untuk melakukan selebihnya. Cv2.putText () mengambil 8 argumen - video sumber, teks yang ingin anda tulis, kedudukan di mana anda mahukan, fon, pembesaran, warna, ketebalan, dan cv2.LINE_AA (yang menjadikan semuanya kelihatan lebih baik).

import cv2
tangkapan = cv2.VideoCapture ('vtest.avi ')
Walaupun Betul:
ret, bingkai = tangkapan.baca ()
lebar = int (tangkapan.dapatkan (3))
tinggi = int (tangkapan.dapatkan (4))
fon = cv2.FONT_HERSHEY_SIMPLEX
gambar = cv2.putText (bingkai, "VTEST.AVI ", (200, 200), fon, 4, (0,0,0), 5, cv2.LINE_AA)
cv2.imshow ('bingkai', gambar)
sekiranya cv2.waitKey (40) == ord ('q'):
rehat
tangkap.pelepasan ()
cv2.memusnahkanAllWindows ()

OpenCV mampu melakukan banyak perkara hebat di mana seseorang mesti bermula di suatu tempat. Mungkin belajar membuat dan menyimpan gambar dan video. Dalam tutorial ini, kami belajar melakukan asas-asas penglihatan komputer.

Selamat Pengekodan!

Cara Menunjukkan Overlay OSD dalam Aplikasi dan Permainan Linux Skrin Penuh
Bermain permainan skrin penuh atau menggunakan aplikasi dalam mod skrin penuh bebas gangguan dapat memisahkan anda dari maklumat sistem yang relevan y...
5 Kad Tangkap Permainan Teratas
Kita semua telah melihat dan menyukai streaming permainan permainan di YouTube. PewDiePie, Jakesepticye, dan Markiplier hanyalah beberapa pemain terat...
Cara Membangunkan Permainan di Linux
Satu dekad yang lalu, tidak banyak pengguna Linux akan meramalkan bahawa sistem operasi kegemaran mereka suatu hari nanti akan menjadi platform permai...