Memanggil Video dan Camera Menggunakan OpenCV Python

Download Source Code

Memulai dengan Video

Tujuan

  • Belajar membaca video, menampilkan video dan menyimpan video.
  • Belajaruntuk mengambil dari Kamera dan menampilkannya.
  • Anda akan mempelajari fungsi ini: cv2.VideoCapture () , cv2.VideoWriter ()




Capture Video dari Kamera

Seringkali, kita harus menangkap live streaming dengan kamera. OpenCV menyediakan antarmuka yang sangat sederhana untuk hal seperti ini. Mari coba ambil video dari kamera (saya menggunakan webcam laptop saya), saya akan mengubah menjadi video grayscale dan tampilkan.

Untuk menangkap video, Anda perlu membuat objek VideoCapture . Argumennya bisa berupa indeks perangkat atau nama file video. Indeks perangkat hanyalah nomor untuk menentukan kamera mana. Biasanya satu kamera akan terhubung (seperti dalam kasus saya). Jadi saya hanya lulus 0 (atau -1). Anda bisa memilih kamera kedua dengan melewati 1 dan seterusnya. Setelah itu, Anda bisa menangkap frame-by-frame. Tapi pada akhirnya, jangan lupa melepaskan tangkapannya.

cap.read() mengembalikan bool (True / False). Jika frame dibaca dengan benar, maka itu benar. Jadi Anda bisa mengecek akhir video dengan memeriksa nilai pengembalian ini.




Terkadang, cap mungkin tidak menginisiasi penangkapan. Dalam hal ini, kode ini menunjukkan error. Anda dapat memeriksa apakah itu diinisialisasi atau tidak dengan metode cap.isOpened () . Jika itu Benar, oke. Jika tidak buka dengan menggunakan cap.open () .

Anda juga dapat mengakses beberapa fitur dari video ini dengan menggunakan metode cap.get (propId) di mana propId adalah angka dari 0 sampai 18. Setiap nomor menunjukkan properti video (jika sesuai dengan video itu) dan rincian lengkap dapat lihat disini: Property Identifier . Beberapa nilai ini dapat dimodifikasi dengan menggunakan cap.set (propId, value) . Nilai adalah nilai baru yang Anda inginkan.

Sebagai contoh, saya bisa mengecek lebar dan tinggi frame dengan cap.get(3) dan cap.get(4) . Ini memberi saya 640×480 secara default. Tapi saya ingin mengubahnya menjadi 320×240. Cukup gunakan ret = cap.set(3,320) dan ret = cap.set(4,240) .

Memutar Video dari file

Sama seperti menangkap dari Camera, cukup ganti indeks kamera dengan nama file video. Juga saat menampilkan frame, gunakan waktu yang tepat untuk cv2.waitKey() . Jika terlalu sedikit, video akan sangat cepat dan jika terlalu tinggi, video akan menjadi lambat (Nah, begitulah cara Anda bisa menampilkan video dalam gerakan lambat). 25 mili detik akan baik-baik saja dalam kasus normal.

Menyimpan Video

Jadi kita ambil video, proses frame-by-frame dan kita ingin menyimpan video itu. Untuk gambar, sangat sederhana, cukup gunakan cv2.imwrite() . Di sini diperlukan sedikit lebih banyak pekerjaan.

Kali ini kita membuat objek VideoWriter . Kita harus menentukan nama file output (misal: output.avi). Kemudian kita harus menentukan kode FourCC (rincian pada paragraf berikutnya). Kemudian jumlah frame per detik (fps) dan ukuran frame harus dilalui. Dan yang terakhir adalah bendera isColor . Jika Benar, encoder mengharapkan bingkai warna, jika tidak, ini bekerja dengan bingkai grayscale.




FourCC adalah kode 4 byte yang digunakan untuk menentukan codec video. Daftar kode yang tersedia dapat ditemukan di fourcc.org . Ini tergantung pada platform. Mengikuti codec bekerja dengan baik untuk saya.

  • Di Fedora: DIVX, XVID, MJPG, X264, WMV1, WMV2. (XVID lebih disukai MJpG menghasilkan video ukuran tinggi X264 memberikan ukuran video yang sangat kecil)
  • Di Windows: DIVX (Lebih untuk diuji dan ditambahkan)
  • Di OSX: (Saya tidak punya akses ke OSX. Ada yang bisa mengisinya?)

Kode FourCC dilewatkan sebagai cv2.VideoWriter_fourcc('M','J','P','G') atau cv2.VideoWriter_fourcc(*'MJPG) untuk MJPG.

Di bawah kode menangkap dari kamera, flip setiap frame dalam arah vertikal dan menyimpannya.

 

Tinggalkan komentar

This site uses Akismet to reduce spam. Learn how your comment data is processed.