Nor Kandir
Mengolah Video dengan OpenCV dan Python
norkandirblog.wordpress.com/2016/12/23/mengolah-video-den...
Mengolah Video dengan OpenCV dan Python
Video adalah gambar bergerak yang ditampilkan di komputer yang meniru pergerakan objek asli. Sebenarnya video adalah tumpukan dari banyak frame (image). Jika sebuah image di tumpuk dengan diberi delay tertentu (jeda waktu tertentu sekian mili detik) maka seolah-olah bergerak. Itulah video.
Play Video dari WebCam
Maksud play video dengan webcam adalah mengaktifkan webcam lalu menampilkan objek yang ditangkap webcam di komputer. Berikut sintaknya:
cap = cv2.VideoCapture(0)
while(True):
ret, frame = cap.read()
cv2.imshow(‘Hasil Capture’, frame)
if cv2.waitKey(1) & 0xFF == ord(‘q’):
break
cap.release()
cv2.destroyAllWindows()
Contoh penerapannya dengan melibatkan simpan capture dan menampilkannya saat menutup webcam:
import cv2
cap = cv2.VideoCapture(0)
while(True):
# Tangkap frame per frame
ret, frame = cap.read()
# RGB diubah ke GrayScale
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# Gambar disimpan dengan nama ‘tankap.png’
cv2.imwrite(‘tangkapRGB.png’,frame)
cv2.imwrite(‘tangkapGray.png’,gray)
# Citra ditampilkan per frame
cv2.imshow(‘frame’,gray)
# Tutup Webcam dengan tombol ESC atau q
if cv2.waitKey(1) & 0xFF == ord(‘q’):
break
# Jalankan capture
cap.release()
cv2.destroyAllWindows()
#Tampilkan hasil capture setelah webcam ditutup
hasilRGB=cv2.imread(‘tangkapRGB.png’)
hasilGray=cv2.imread(‘tangkapGray.png’)
cv2.imshow(‘RGB’,hasilRGB)
cv2.imshow(‘Gray’,hasilGray)
cv2.waitKey(0)
cv2.destroyAllWindows()
Cara kerjanya, program menyalakan Webcam lalu mencapture (menangkap) objek yang ada di depannya dan disimpan dalam frame. Dengan pengulangan while maka objek didepannya ditangkap terus satu demi satu. Dari tumpukan frame inilah maka menjadi gambar bergerak (video). Frame ini lalu ditampilkan dengan bantuan imshow() dengan while.
Mengolah Video dengan OpenCV dan Python
Jika user menekan tombol ESC atau q maka webcam mati. Kemudian, frame yang tersimpan terakhir ditampilkan dengan bantuan imshow() untuk hasil RGB dan Gray.
Mengolah Video dengan OpenCV dan PythonMengolah Video dengan OpenCV dan Python
Play Video dari File
File yang saya gunakan berformat wmv (juga menerima format lainnya seperti mp4 dan avi), yaitu file video bawaan Window 7 yang terdapat di C:\Users\Public\Videos\Sample Videos\Wildlife.wmv.
Untuk bisa menjalankan video, diperlukan sedikit pengaturan, yaitu: copy file opencv_ffmpeg2411.dll yang terdapat di E:\opencv\build\x86\vc12\bin\ lalu taruh di C:\Python27.
Sintak yang digunakan sama persis dengan Play Video dengan Webcam, bedanya hanya di bagian ini:
cap = cv2.VideoCapture(0)
diganti dengan
cap = cv2.VideoCapture(‘C:\Users\Public\Videos\Sample Videos\Wildlife.wma’)
Contoh penerapannya adalah:
import cv2
cap = cv2.VideoCapture(‘C:\Users\Writer\Videos\Wildlife.mp4’)
while(True):
# Tangkap frame per frame
ret, frame = cap.read()
# RGB diubah ke GrayScale
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# Gambar disimpan dengan nama ‘tankap.png’
cv2.imwrite(‘tangkapGray.png’,gray)
# Citra ditampilkan per frame
cv2.imshow(‘frame’,gray)
# Tutup Webcam dengan tombol ESC atau q
if cv2.waitKey(1) & 0xFF == ord(‘q’):
break
# Jalankan capture
cap.release()
cv2.destroyAllWindows()
Video yang diplay mengalami percepatan gerak. Untuk mengurai percepatan ini bisa digunakan imread() dengan asumsi program anak menyimpan image di komputer lalu ditindih image dari frame berikutnya sehingga mengurangi percepatan gerak video. Namun, terkadang sebuah video memiliki bitrate yang besar sehingga bisa berjalan dengan normal, seperti kasus video di atas. Jika Anda memainkan video kecil maka akan terasa percepatannya. Sebenarnya hal ini bisa diatasi dengan sintak khusus tetapi saya sendiri belum sempat mencarinya. Berikut ini hasilnya:
Mengolah Video dengan OpenCV dan Python
Save Video dari Webcam dan File
Video yang dicapture oleh Webcam atau yang berasal dari file, bisa disimpan di drive komputer dengan hasil pengolahan tertentu, grayscale misalnya. Berikut sintak umumnya:
import cv2
cap = cv2.VideoCapture(0)
# Definisikan codex (format video)
fourcc = cv2.cv.CV_FOURCC(*’XVID’)
# cv2.VideoWriter([‘nama file’,[nilai fourcc],[nilai fps],[nilai lebar,panjang])
out = cv2.VideoWriter(‘output.avi’, fourcc, 5, (640,480))
while(cap.isOpened()):
ret, frame = cap.read()
if ret==True:
out.write(frame)
# Tampilkan hasil capture webcam
cv2.imshow(‘Hasil Capture’,frame)
if cv2.waitKey(1) & 0xFF == ord(‘q’):
break
else:
break
# Jalankan capture
cap.release()
out.release()
cv2.destroyAllWindows()
jika berupa file dari drive, maka hanya mengganti cap = cv2.VideoCapture(0) dengan cap = cv2.VideoCapture(‘address_file.avi’)
fourcc = cv2.cv.CV_FOURCC(*’XVID’) digunakan untuk format file dan XVID adalah standar format. Untuk video dari file, jika XVID ditulis DIVX maka video terbaca berkebalikan arah, yang sebelah kanan berada di sebelah kiri, dan sebaliknya. Berikut jenis-jenis format beserta sintaknya:
fps (frame per second) maksudnya kecepatan pergantian dari satu frame ke frame lainnya. Semakian besar nilainya, maka video semakin cepat. Nilai normal adalah 5.
Contoh penggunaannya adalah:
import cv2
cap = cv2.VideoCapture(0)
# Definisikan codex (format video)
fourcc = cv2.cv.CV_FOURCC(*’DIVX’)
# cv2.VideoWriter([‘nama file’,[nilai fourcc],[nilai fps],[nilai lebar,panjang])
out = cv2.VideoWriter(‘output.avi’, fourcc, 5, (640,480))
raw_input(‘Tekan enter untuk mulai dan esc untuk saving dan keluar’)
while(cap.isOpened()):
ret, frame = cap.read()
if ret==True:
# Mengatur derajat putar
frame = cv2.flip(frame,180)
# Mencetak frame ke out
out.write(frame)
# Tampilkan hasil capture webcam
cv2.imshow(‘Hasil Capture’,frame)
if cv2.waitKey(1) & 0xFF == ord(‘q’):
break
else:
break
# Jalankan capture
cap.release()
out.release()
cv2.destroyAllWindows()
###PLAY (Copas dari file PlayVideo_File.py)
#import cv2
cap = cv2.VideoCapture(‘output.avi’)
while(True):
# Tangkap frame per frame
ret, frame = cap.read()
# RGB diubah ke GrayScale
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# Gambar disimpan dengan nama ‘tankap.png’
cv2.imwrite(‘tangkapGray.png’,gray)
# Citra ditampilkan per frame
cv2.imshow(‘Hasil Tangkap Frame Hasilkan Video’,gray)
# Tutup Webcam dengan tombol ESC atau q
if cv2.waitKey(1) & 0xFF == ord(‘q’):
break
# Jalankan capture
cap.release()
cv2.destroyAllWindows()
raw_input(‘Tekan enter untuk mulai dan esc untuk saving dan keluar’) digunakan untuk menampilkan kalimat di command promp (cmd) dan program dimulai dengan menekan enter.
frame = cv2.flip(frame,180) digunakan untuk memutar video. Jika nilainya 0 maka video akan terbalik, yang bawah menjadi atas dan yang atas menjadi bawah.
Cara kerjanya, program menyalakan Webcam lalu mencapture (menangkap) objek yang ada di depannya dan disimpan dalam frame. Dengan pengulangan while maka objek didepannya ditangkap terus satu demi satu. Dari tumpukan frame inilah maka menjadi gambar bergerak (video). Frame ini lalu ditampilkan dengan bantuan imshow() dengan while. Ketika user menekan tombol q maka Webcam mati dan program kemudian memaikan output.avi.
Realtime untuk Image dan Video
Realtime (waktu nyata) adalah istilah untuk merekam suatu objek dan menampilkannya langsung. Maka apa yang tampil adalah apa terekam saat itu juga. Tentunya apa yang ditampilkan ini sudah mengalami pengolahan, warnanya grayscale atau wajah terdeteksi dengan kotak-kotak misalnya.
Pada latihan kali ini, kita akan memanfaatkan semua teori yang sudah kita pelajari yaitu imread(), imwrite(), imshow(), cvtColor(),VideoCapture(), dan lain-lain. Langsung saja, perhatikan skrip di bawah ini:
import cv2
cap = cv2.VideoCapture(0)
while(True):
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
#Canny
canny = cv2.Canny(frame,100,200)
#Tampilkan semua capture
cv2.imshow(‘Hasil Capture’, frame)
cv2.imshow(‘Hasil Gray’,gray)
cv2.imshow(‘Hasil HSV’,hsv)
cv2.imshow(‘Hasil Canny’,canny)
#Simpan capture
cv2.imwrite(‘realtimeRGB.jpg’,frame)
cv2.imwrite(‘realtimeGray.jpg’,gray)
cv2.imwrite(‘realtimeHSV.jpg’,hsv)
cv2.imwrite(‘realtimeCanny.jpg’,canny)
#Tutup window saat ditekan tombol “q”
if cv2.waitKey(1) & 0xFF == ord(‘q’):
break
#Jalankan capture
cap.release()
cv2.destroyAllWindows()
Jika program ini dirun, maka hasilnya sebagai berikut:
Mengolah Video dengan OpenCV dan Python
Artikel norkandirblog.wordpress.com
Mengolah Video dengan OpenCV dan Python
norkandirblog.wordpress.com/2016/12/23/mengolah-video-den...
Mengolah Video dengan OpenCV dan Python
Video adalah gambar bergerak yang ditampilkan di komputer yang meniru pergerakan objek asli. Sebenarnya video adalah tumpukan dari banyak frame (image). Jika sebuah image di tumpuk dengan diberi delay tertentu (jeda waktu tertentu sekian mili detik) maka seolah-olah bergerak. Itulah video.
Play Video dari WebCam
Maksud play video dengan webcam adalah mengaktifkan webcam lalu menampilkan objek yang ditangkap webcam di komputer. Berikut sintaknya:
cap = cv2.VideoCapture(0)
while(True):
ret, frame = cap.read()
cv2.imshow(‘Hasil Capture’, frame)
if cv2.waitKey(1) & 0xFF == ord(‘q’):
break
cap.release()
cv2.destroyAllWindows()
Contoh penerapannya dengan melibatkan simpan capture dan menampilkannya saat menutup webcam:
import cv2
cap = cv2.VideoCapture(0)
while(True):
# Tangkap frame per frame
ret, frame = cap.read()
# RGB diubah ke GrayScale
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# Gambar disimpan dengan nama ‘tankap.png’
cv2.imwrite(‘tangkapRGB.png’,frame)
cv2.imwrite(‘tangkapGray.png’,gray)
# Citra ditampilkan per frame
cv2.imshow(‘frame’,gray)
# Tutup Webcam dengan tombol ESC atau q
if cv2.waitKey(1) & 0xFF == ord(‘q’):
break
# Jalankan capture
cap.release()
cv2.destroyAllWindows()
#Tampilkan hasil capture setelah webcam ditutup
hasilRGB=cv2.imread(‘tangkapRGB.png’)
hasilGray=cv2.imread(‘tangkapGray.png’)
cv2.imshow(‘RGB’,hasilRGB)
cv2.imshow(‘Gray’,hasilGray)
cv2.waitKey(0)
cv2.destroyAllWindows()
Cara kerjanya, program menyalakan Webcam lalu mencapture (menangkap) objek yang ada di depannya dan disimpan dalam frame. Dengan pengulangan while maka objek didepannya ditangkap terus satu demi satu. Dari tumpukan frame inilah maka menjadi gambar bergerak (video). Frame ini lalu ditampilkan dengan bantuan imshow() dengan while.
Mengolah Video dengan OpenCV dan Python
Jika user menekan tombol ESC atau q maka webcam mati. Kemudian, frame yang tersimpan terakhir ditampilkan dengan bantuan imshow() untuk hasil RGB dan Gray.
Mengolah Video dengan OpenCV dan PythonMengolah Video dengan OpenCV dan Python
Play Video dari File
File yang saya gunakan berformat wmv (juga menerima format lainnya seperti mp4 dan avi), yaitu file video bawaan Window 7 yang terdapat di C:\Users\Public\Videos\Sample Videos\Wildlife.wmv.
Untuk bisa menjalankan video, diperlukan sedikit pengaturan, yaitu: copy file opencv_ffmpeg2411.dll yang terdapat di E:\opencv\build\x86\vc12\bin\ lalu taruh di C:\Python27.
Sintak yang digunakan sama persis dengan Play Video dengan Webcam, bedanya hanya di bagian ini:
cap = cv2.VideoCapture(0)
diganti dengan
cap = cv2.VideoCapture(‘C:\Users\Public\Videos\Sample Videos\Wildlife.wma’)
Contoh penerapannya adalah:
import cv2
cap = cv2.VideoCapture(‘C:\Users\Writer\Videos\Wildlife.mp4’)
while(True):
# Tangkap frame per frame
ret, frame = cap.read()
# RGB diubah ke GrayScale
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# Gambar disimpan dengan nama ‘tankap.png’
cv2.imwrite(‘tangkapGray.png’,gray)
# Citra ditampilkan per frame
cv2.imshow(‘frame’,gray)
# Tutup Webcam dengan tombol ESC atau q
if cv2.waitKey(1) & 0xFF == ord(‘q’):
break
# Jalankan capture
cap.release()
cv2.destroyAllWindows()
Video yang diplay mengalami percepatan gerak. Untuk mengurai percepatan ini bisa digunakan imread() dengan asumsi program anak menyimpan image di komputer lalu ditindih image dari frame berikutnya sehingga mengurangi percepatan gerak video. Namun, terkadang sebuah video memiliki bitrate yang besar sehingga bisa berjalan dengan normal, seperti kasus video di atas. Jika Anda memainkan video kecil maka akan terasa percepatannya. Sebenarnya hal ini bisa diatasi dengan sintak khusus tetapi saya sendiri belum sempat mencarinya. Berikut ini hasilnya:
Mengolah Video dengan OpenCV dan Python
Save Video dari Webcam dan File
Video yang dicapture oleh Webcam atau yang berasal dari file, bisa disimpan di drive komputer dengan hasil pengolahan tertentu, grayscale misalnya. Berikut sintak umumnya:
import cv2
cap = cv2.VideoCapture(0)
# Definisikan codex (format video)
fourcc = cv2.cv.CV_FOURCC(*’XVID’)
# cv2.VideoWriter([‘nama file’,[nilai fourcc],[nilai fps],[nilai lebar,panjang])
out = cv2.VideoWriter(‘output.avi’, fourcc, 5, (640,480))
while(cap.isOpened()):
ret, frame = cap.read()
if ret==True:
out.write(frame)
# Tampilkan hasil capture webcam
cv2.imshow(‘Hasil Capture’,frame)
if cv2.waitKey(1) & 0xFF == ord(‘q’):
break
else:
break
# Jalankan capture
cap.release()
out.release()
cv2.destroyAllWindows()
jika berupa file dari drive, maka hanya mengganti cap = cv2.VideoCapture(0) dengan cap = cv2.VideoCapture(‘address_file.avi’)
fourcc = cv2.cv.CV_FOURCC(*’XVID’) digunakan untuk format file dan XVID adalah standar format. Untuk video dari file, jika XVID ditulis DIVX maka video terbaca berkebalikan arah, yang sebelah kanan berada di sebelah kiri, dan sebaliknya. Berikut jenis-jenis format beserta sintaknya:
fps (frame per second) maksudnya kecepatan pergantian dari satu frame ke frame lainnya. Semakian besar nilainya, maka video semakin cepat. Nilai normal adalah 5.
Contoh penggunaannya adalah:
import cv2
cap = cv2.VideoCapture(0)
# Definisikan codex (format video)
fourcc = cv2.cv.CV_FOURCC(*’DIVX’)
# cv2.VideoWriter([‘nama file’,[nilai fourcc],[nilai fps],[nilai lebar,panjang])
out = cv2.VideoWriter(‘output.avi’, fourcc, 5, (640,480))
raw_input(‘Tekan enter untuk mulai dan esc untuk saving dan keluar’)
while(cap.isOpened()):
ret, frame = cap.read()
if ret==True:
# Mengatur derajat putar
frame = cv2.flip(frame,180)
# Mencetak frame ke out
out.write(frame)
# Tampilkan hasil capture webcam
cv2.imshow(‘Hasil Capture’,frame)
if cv2.waitKey(1) & 0xFF == ord(‘q’):
break
else:
break
# Jalankan capture
cap.release()
out.release()
cv2.destroyAllWindows()
###PLAY (Copas dari file PlayVideo_File.py)
#import cv2
cap = cv2.VideoCapture(‘output.avi’)
while(True):
# Tangkap frame per frame
ret, frame = cap.read()
# RGB diubah ke GrayScale
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# Gambar disimpan dengan nama ‘tankap.png’
cv2.imwrite(‘tangkapGray.png’,gray)
# Citra ditampilkan per frame
cv2.imshow(‘Hasil Tangkap Frame Hasilkan Video’,gray)
# Tutup Webcam dengan tombol ESC atau q
if cv2.waitKey(1) & 0xFF == ord(‘q’):
break
# Jalankan capture
cap.release()
cv2.destroyAllWindows()
raw_input(‘Tekan enter untuk mulai dan esc untuk saving dan keluar’) digunakan untuk menampilkan kalimat di command promp (cmd) dan program dimulai dengan menekan enter.
frame = cv2.flip(frame,180) digunakan untuk memutar video. Jika nilainya 0 maka video akan terbalik, yang bawah menjadi atas dan yang atas menjadi bawah.
Cara kerjanya, program menyalakan Webcam lalu mencapture (menangkap) objek yang ada di depannya dan disimpan dalam frame. Dengan pengulangan while maka objek didepannya ditangkap terus satu demi satu. Dari tumpukan frame inilah maka menjadi gambar bergerak (video). Frame ini lalu ditampilkan dengan bantuan imshow() dengan while. Ketika user menekan tombol q maka Webcam mati dan program kemudian memaikan output.avi.
Realtime untuk Image dan Video
Realtime (waktu nyata) adalah istilah untuk merekam suatu objek dan menampilkannya langsung. Maka apa yang tampil adalah apa terekam saat itu juga. Tentunya apa yang ditampilkan ini sudah mengalami pengolahan, warnanya grayscale atau wajah terdeteksi dengan kotak-kotak misalnya.
Pada latihan kali ini, kita akan memanfaatkan semua teori yang sudah kita pelajari yaitu imread(), imwrite(), imshow(), cvtColor(),VideoCapture(), dan lain-lain. Langsung saja, perhatikan skrip di bawah ini:
import cv2
cap = cv2.VideoCapture(0)
while(True):
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
#Canny
canny = cv2.Canny(frame,100,200)
#Tampilkan semua capture
cv2.imshow(‘Hasil Capture’, frame)
cv2.imshow(‘Hasil Gray’,gray)
cv2.imshow(‘Hasil HSV’,hsv)
cv2.imshow(‘Hasil Canny’,canny)
#Simpan capture
cv2.imwrite(‘realtimeRGB.jpg’,frame)
cv2.imwrite(‘realtimeGray.jpg’,gray)
cv2.imwrite(‘realtimeHSV.jpg’,hsv)
cv2.imwrite(‘realtimeCanny.jpg’,canny)
#Tutup window saat ditekan tombol “q”
if cv2.waitKey(1) & 0xFF == ord(‘q’):
break
#Jalankan capture
cap.release()
cv2.destroyAllWindows()
Jika program ini dirun, maka hasilnya sebagai berikut:
Mengolah Video dengan OpenCV dan Python
Artikel norkandirblog.wordpress.com