Oke gengs setelah kemarin membahas tentang Gambar menggunakan OpenCV kali ini kita akan membahas mengenai opencv
khususnya mengenai video. Jadi disini kita akan pelajari tentang :
• Membaca video, menampilkan video dan menyimpan video.
• Menangkap dari kamera dan menampilkannya.
• Fungsi: cv2. VideoCapture(), cv2. VideoWriter()
Merekam Video dari
kamera
Sering kali, kita harus menangkap live streaming dengan
kamera. OpenCV menyediakan antarmuka yang sangat sederhana ini. Mari kita
menangkap video dari kamera (saya menggunakan webcam built-in laptop saya),
mengubahnya menjadi grayscale video dan menampilkannya. Hanya tugas sederhana
untuk memulai.
Untuk menangkap video, Anda perlu membuat sebuah objek VideoCapture. Argumen dapat indeks
perangkat atau nama video file. Perangkat indeks adalah hanya nomor untuk
menentukan kamera. Biasanya satu kamera akan terhubung (seperti dalam kasus
saya). Jadi saya hanya menggunakan 0 (atau 1). Anda dapat memilih kamera kedua
dengan menggunakan 1 dan sebagainya. Setelah itu, Anda dapat menangkap frame-by
frame. Tapi pada akhirnya, jangan lupa untuk menyelesaikan penangkapan.
import numpy
as np
import cv2
cap =
cv2.VideoCapture(0)
while(True):
# Capture frame-by-frame
ret, frame =
cap.read()
# Our operations on the frame come
here
gray =
cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# Display the resulting
frame
cv2.imshow('frame',gray)
if cv2.waitKey(1) &
0xFF == ord('q'):
break
# When everything done, release the
capture
cap.release()
cv2.destroyAllWindows()
Kita bisa mendapatkan output seperti berikut ini
Cap.read() return bool
(True/False). Jika bingkai dibaca dengan benar, maka akan benar. Sehingga Anda
dapat memeriksa akhir video dengan memeriksa nilai return ini. Kadang-kadang, cap
mungkin tidak memiliki iinisialisasi pada capture. Dalam hal ini, kode ini
menunjukkan kesalahan. Anda dapat memeriksa apakah sudah diinisialisasi atau tidak
dengan metode cap.isOpened(). Jika itu benar, OK sebaliknya membuka menggunakan
cap.open(). Anda juga dapat mengakses beberapa fitur dari video ini menggunakan
metode cap.get(propId) di mana propId adalah sebuah nomor dari 0 sampai 18.
Setiap angka menunjukkan properti video (jika berlaku untuk video itu) dan
rincian lengkap dapat dilihat di sini: properti
Identifier. Beberapa nilai-nilai ini dapat dimodifikasi dengan menggunakan
cap.set (propId, value). Nilai ini adalah nilai baru yang Anda inginkan. Sebagai
contoh, saya dapat memeriksa bingkai lebar dan tinggi oleh cap.get(3) dan
cap.get(4). Ini memberi saya 640 x 480 secara default. Tapi aku ingin
memodifikasi 320 x 240. Hanya menggunakan ret = cap.set(3,320) dan ret =
cap.set(4,240).
Sebagai contoh, saya dapat
memeriksa bingkai lebar dan tinggi oleh cap.get(3) dan cap.get(4). Ini memberi
saya 640 x 480 secara default. Tapi aku ingin memodifikasi 320 x 240. Hanya
menggunakan ret = cap.set(3,320) dan ret = cap.set(4,240).
Playing Video dari file
Ini sama seperti menangkap dari
kamera, hanya merubahan kamera indeks dengan nama video file. Juga saat
menampilkan frame, gunakan waktu yang tepat untuk cv2.waitKey(). Jika terlalu
kurang, video akan sangat cepat dan jika itu terlalu tinggi, video akan lambat (Well,
bagaimana cara anda bisa menampilkan video slow motion). 25 milidetik akan
menjadi OK dalam kasus normal. Disini kita akan memutar video Megamind sebelum itu anda bias download videonya DISINI.
import
numpy as np
import
cv2
cap = cv2.VideoCapture('Megamind.avi')
while(cap.isOpened()):
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
Menyimpan Video
Jadi kita menangkap video, memproses frame-by frame dan kita
ingin menyimpan video tersebut. Untuk gambar, sangat sederhana, hanya
menggunakan cv2.imwrite(). Di sini sedikit lebih banyak code yang diperlukan.
Kali ini kita membuat sebuah objek VideoWriter. Kita harus menetapkan nama file output (misalnya:
output.avi). Kemudian kita harus menentukan kode FourCC. Jumlah bingkai per
detik (fps) dan ukuran bingkai harus diteruskan. Dan terakhir adalah isColor
flag. Jika true, encoder mengharapkan color frame, sebaliknya itu bisa dengan
grayscale frame.
FourCC adalah kode 4-byte yang digunakan untuk menentukan
video codec. Daftar kode yang tersedia dapat ditemukan di fourcc.org. Itu
adalah tergantung platform. Mengikuti codec bekerja baik bagi saya.
·
Di Fedora: DIVX, XVID, MJPG, X 264, WMV1, WMV2.
(XVID lebih disukai. MJPG hasil dalam ukuran tinggi video. X 264 memberikan
sangat kecil ukuran video)
·
Dalam Windows: DIVX (More to be tested and added)
·
Dalam OSX: (saya tidak memiliki akses ke OSX.
Dapat beberapa satu mengisi ini?)
FourCC kode dikirimkan sebagai cv2.
VideoWriter_fourcc('M','J','P','G') atau cv2.VideoWriter_fourcc(*'MJPG) untuk
MJPG.
Kita bisa melakukan flip atau mengambil frame dalam bentuk
yang berbeda. Kita bisa mengatur atau memutar arah sesuai keinginan kita.
import
numpy as np
import
cv2
cap = cv2.VideoCapture(0)
#
Define the codec and create VideoWriter object
fourcc =
cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi',fourcc,
20.0, (640,480))
while(cap.isOpened()):
ret, frame = cap.read()
if ret==True:
frame = cv2.flip(frame,1)
#
write the flipped frame
out.write(frame)
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
#
Release everything if job is finished
cap.release()
out.release()
cv2.destroyAllWindows()
Gambar diatas merupakan output saat kita mengambil video
kemudian kita bisa menekan tombol q dan video nantinya akan disimpan di directory.
Kita bisa lihat hasilnya seperti dibawah ini.
Jadi dengan berakhirnya bahasan kita maka berakhir pula post
kali ini, mohon maaf jika gambar yang ditampilkan sedikit membuat anda
tercengang hahahaha. Oke ditunggu artikel selanjutnya.
Memulai Video dengan OpenCV-Python
Reviewed by Jimmy Pujoseno
on
March 13, 2018
Rating:
cv2 has no attribute VideoCapture
ReplyDelete