OpenCV (open source computer vision) merupakan sebuah pustaka bahasa pemograman yang ditujukan untuk penggunaan pengolahan citra secara waktu nyata. Secara original, OpenCV dikembangkan oleh Intel, kemudian didukung oleh Willow Garage dan kemudian Itseez (yang diakuisisi oleh Intel). Pustaka OpenCV sudah mendukung lintas platform dan dapat digunakan dengan gratis untuk digunakan di bawah lisensi BSD Open-source. Dalam perkembangannnya, OpenCV sudah mendukung beberapa framework untuk deep-learning seperti TensorFlow, YOLO, Torch/PyTorch dan Caffee. Beberapa model terbaru yang mendukung ada pada daftar berikut ini. Show
- OpenCV-PythonYa, pada tutorial kali ini, kita akan menggunakan Python untuk membahas OpenCV-nya. Jadi, jika kalian masih belum paham atau pengen belajar tentang Python, bisa membaca tutorial Dasar Python sebelumnya pada tautan berikut. *) jangan lupa untuk di-star ya repo nya... Mengapa Python? kurang lebih karena bahasa Python lebih mudah dibaca dalam Bahasa Inggris. Selain itu, juga lumayan cepat dalam komputasinya, meski tak secepat bahasa C++. Akan tetapi, dari kemudahan terbacanya tersebut, dapat memudahkan pembelajar untuk memahaminya. Jadi, tetap semangat ya untuk belajar hal yang mungkin baru. Untuk Python yang akan digunakan pada tutorial ini adalah versi import cv2 # Panggil citra digital dengan nama anu.jpeg # dan memasukkannya pada variabel img img = cv2.imread("anu.jpeg", 0)0 sedangkan untuk OpenCV nya digunakan import cv2 # Panggil citra digital dengan nama anu.jpeg # dan memasukkannya pada variabel img img = cv2.imread("anu.jpeg", 0)1 - Tentang tutorial iniTutorial ini ditujukan untuk kalian yang baru atau belum penah memahami OpenCV sebagai sebuah pustaka pada bahasa pemograman. Oleh karenanya, tutorial ini berisi tentang sedikit teori dasar dari pengolahan citra digital yang nantinya akan diberi tutorial penggunaannya menggunakan pustaka OpenCV. Ya, setidaknya kalian sudah membaca bagaimana toeri yang sebenarnya terjadi pada tiap pustaka dan fungsinya. Kebanyakan pada pustaka OpenCV hanya disediakan fungsi-fungsi yang sudah jadi saja. Selain itu, pada akhir pembahasan tiap bab nya, akan kami sematkan sebuah video yang bisa kalian gunakan sebagai suplemen atau patokan tutorialnya bekerja. Apabila kalian mengalami permasalahan pada contoh kode yang disematkan atau ingin berkontribusi pada Tutorial Dasar OpenCV ini, kalian bisa email kami pada de.mhnd[at]gmail[dot]com - Apa saja keuntungannya?Keuntungannya mungkin tidak ada selain hanya sharing ilmu tentang OpenCV menggunakan Pyhton. Jadi, kalian bisa menggunakan ilmu yang ada didalamnya untuk kebutuhan kalian pribadi atau yang lainnya. tetapi bukan tulisannya ya... lantas kalian langsung menduplikat semua atau sebagian isi dari tutorial ini untuk dibuat buku, skripsi, atau laporan kalian. Bukan begitu cara mainnya. Kami hanya membagi ilmu ini dalam Bahasa Indonesia. import cv2 # Panggil citra digital dengan nama anu.jpeg # dan memasukkannya pada variabel img img = cv2.imread("anu.jpeg", 0)2. - Ayo mulai belajar!Langkah pertama yang bisa kalian buat adalah membuat akun github dan mem-fork atau star tutorial ini agar kalian mudah mencari atau kalian bisa bookmark tutorial ini pada browser kalian. Contributor
Ada beberapa sistem operasi yang sering digunakan di Indonesia, yaitu Windows, Linux dan Mac. Nah, kita akan menjelaskan dasar instalasinya. - Instalasi pada Windows
- Instalasi pada Ubuntu/LinuxUntuk instalasi pada Ubuntu/Linux, kalian bisa membuka terminal dengan menekan import cv2 # Panggil citra digital dengan nama anu.jpeg # dan memasukkannya pada variabel img img = cv2.imread("anu.jpeg", 0)9 dan memasukkan perintah berikut:
- Instalasi pada MacNah, silahkan cari sendiri ya... Author belum pernah menggunakan mac, jadi kurang lebih sama dengan linux sepertinya. :D - Test instalasi kalianNah, apakah instalasi kalian sudah benar dan sukses? Kalian bisa membuat sebuah demo untuk mengakusisi citra dari kamera webcam kalian.
import cv2 cap=cv2.VideoCapture(0) while(True): ret,frame=cap.read() cv2.imshow('frame', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()
Nah, setelah instalasi kalian sukses, mari kita lanjutkan pada bab selanjutnya. 3. Memulai Fitur GUI pada OpenCV3.1. Menggunakan Citra Digital
- Membaca Citra DigitalCitra digital dapat kita panggil pada proyek Python kita menggunakan fugnsi cv2.imshow ('Gambar', img) cv2.waitKey(0) cv2.destroyAllWindows()6. Untuk pembacaan citra yang bisa dipanggil, hanya pada direktori yang sama dengan letak direktori dari dokumen Python itu disimpan. Jadi, jangan lupa memindah lokasi gambar yang akan digunakan pada folder yang sama dengan dokumen kalian ya... Untuk isian dari cv2.imshow ('Gambar', img) cv2.waitKey(0) cv2.destroyAllWindows()7 kedua fungsi tersebut, dapat digunakan:
Coba buat sebuah dokumen baru dan tuliskan kode berikut didalamnya. import cv2 # Panggil citra digital dengan nama anu.jpeg # dan memasukkannya pada variabel img img = cv2.imread("anu.jpeg", 0) untuk gambar cv2.imwrite('burung.png',img)2 , kita dapat menggunakan gambar berikut. Silahkan unduh disini atau klik kanan gambar dibawah ini lalu cv2.imwrite('burung.png',img)3. ketika dokumen tersebut sudah disimpan dengan satu direktori dengan gambar tersebut, apabila di cv2.imwrite('burung.png',img)4 maka tidak akan ada tampilan gambar sama sekali hingga kita menampilkannya menggunakan fitur GUI dari OpenCV. - Menampilkan Citra DigitalMenampilkan citra yang sudah dipanggil dan dirubah menjadi sebuah variabel, maka kita bisa menggunakan fungsi cv2.imwrite('burung.png',img)5 untuk menampilkan citra pada variabel tersebut. Untuk jendela untuk menampilkan citra, akan secara otomatis menyesuaikan dengan ukuran citranya. pada penulisan fungsinya, ada beberapa masukan, yaitu nama windownya dan diikuti dengan nama variabel yang berisikan citra yang akan ditampilkan. Coba kode berikut dibawah kode pembacaan citra digital diatas. cv2.imshow ('Gambar', img) cv2.waitKey(0) cv2.destroyAllWindows() Apabila kalian menjalakan programnya, maka akan menampilkan gambar seperti berikut: pada baris cv2.imwrite('burung.png',img)6 merupakan sebuah fungsi untuk menahan frame atau citra yang sedang kita gunakan. Dengan kata lain, apabila kita menggunakan banyak frame, kita tidak perlu menahannya dengan memberikan nilai selain cv2.imwrite('burung.png',img)0. pada baris cv2.imwrite('burung.png',img)8 merupakan sebuah fungsi untuk menutup semua jendela yang aktif pada sebuah program yang berjalan. Biasanya kita bisa menggabungkan dengan perintah cv2.imwrite('burung.png',img)9 (seperti pada kode tes instalasi pada bab 2). - Menyimpan gambar menjadi sebuah fileMenyimpan gambar hasil pengolahan citra digital pada OpenCV dapat digunakan fungsi import cv2 # Panggil citra digital dengan nama anu.jpeg img = cv2.imread("anu.jpeg", 0) imb = img.copy() # Buat duplikat dari variabel img imb[imb>100]=255 # Buat citra biner imb[imb<100]=0 cv2.imshow ('Gambar', img) cv2.imshow ('Gambar BW', imb) k = cv2.waitKey(0) if k == 27: # menunggu hingga tombol ESC ditekan dan keluar cv2.destroyAllWindows() elif k == ord('s'): # menunggu hingga tombol 's' ditekan dan simpan cv2.imwrite('burung.png',img) cv2.imwrite('burungBW.bmp',imb) cv2.destroyAllWindows()0. Untuk nama file, kalian bisa menggunakan import cv2 # Panggil citra digital dengan nama anu.jpeg img = cv2.imread("anu.jpeg", 0) imb = img.copy() # Buat duplikat dari variabel img imb[imb>100]=255 # Buat citra biner imb[imb<100]=0 cv2.imshow ('Gambar', img) cv2.imshow ('Gambar BW', imb) k = cv2.waitKey(0) if k == 27: # menunggu hingga tombol ESC ditekan dan keluar cv2.destroyAllWindows() elif k == ord('s'): # menunggu hingga tombol 's' ditekan dan simpan cv2.imwrite('burung.png',img) cv2.imwrite('burungBW.bmp',imb) cv2.destroyAllWindows()1 atau import cv2 # Panggil citra digital dengan nama anu.jpeg img = cv2.imread("anu.jpeg", 0) imb = img.copy() # Buat duplikat dari variabel img imb[imb>100]=255 # Buat citra biner imb[imb<100]=0 cv2.imshow ('Gambar', img) cv2.imshow ('Gambar BW', imb) k = cv2.waitKey(0) if k == 27: # menunggu hingga tombol ESC ditekan dan keluar cv2.destroyAllWindows() elif k == ord('s'): # menunggu hingga tombol 's' ditekan dan simpan cv2.imwrite('burung.png',img) cv2.imwrite('burungBW.bmp',imb) cv2.destroyAllWindows()2 atau sesuai dengan kebutuhan kalian. Jika hasil citra kalian dalam bentuk citra biner, gunakan format import cv2 # Panggil citra digital dengan nama anu.jpeg img = cv2.imread("anu.jpeg", 0) imb = img.copy() # Buat duplikat dari variabel img imb[imb>100]=255 # Buat citra biner imb[imb<100]=0 cv2.imshow ('Gambar', img) cv2.imshow ('Gambar BW', imb) k = cv2.waitKey(0) if k == 27: # menunggu hingga tombol ESC ditekan dan keluar cv2.destroyAllWindows() elif k == ord('s'): # menunggu hingga tombol 's' ditekan dan simpan cv2.imwrite('burung.png',img) cv2.imwrite('burungBW.bmp',imb) cv2.destroyAllWindows()3 untuk hasil yang lebih baik. File akan disimpan pada direktori yang sama dengan letak dokumen disimpan. cv2.imwrite('burung.png',img) - Gabungkan semua kodenyaKode diatas merupakan kepingan kode yang memanggil dan menampilkannya pada jendela menggunakan fitur GUI pada OpenCV. Mari kita gabungkan kesemuanya. import cv2 # Panggil citra digital dengan nama anu.jpeg img = cv2.imread("anu.jpeg", 0) imb = img.copy() # Buat duplikat dari variabel img imb[imb>100]=255 # Buat citra biner imb[imb<100]=0 cv2.imshow ('Gambar', img) cv2.imshow ('Gambar BW', imb) k = cv2.waitKey(0) if k == 27: # menunggu hingga tombol ESC ditekan dan keluar cv2.destroyAllWindows() elif k == ord('s'): # menunggu hingga tombol 's' ditekan dan simpan cv2.imwrite('burung.png',img) cv2.imwrite('burungBW.bmp',imb) cv2.destroyAllWindows() Apabila dijalankan maka akan muncul dua jendela gambar seperti berikut ini Apabila kita menekan tombol import cv2 # Panggil citra digital dengan nama anu.jpeg img = cv2.imread("anu.jpeg", 0) imb = img.copy() # Buat duplikat dari variabel img imb[imb>100]=255 # Buat citra biner imb[imb<100]=0 cv2.imshow ('Gambar', img) cv2.imshow ('Gambar BW', imb) k = cv2.waitKey(0) if k == 27: # menunggu hingga tombol ESC ditekan dan keluar cv2.destroyAllWindows() elif k == ord('s'): # menunggu hingga tombol 's' ditekan dan simpan cv2.imwrite('burung.png',img) cv2.imwrite('burungBW.bmp',imb) cv2.destroyAllWindows()4, program akan menyimpan pada direktori seperti gambar berikut. 3.2. Menggunakan Video
Sebuah video biasanya sering disebut dengan image sequence atau citra digital yang urutan waktu atau juga dalam urutan frame. Biasanya pada tiap detik, sebuah video memiliki 24 atau 30 frame. Oleh karenanya, kita sering mendengar istilah import cv2 # Panggil citra digital dengan nama anu.jpeg img = cv2.imread("anu.jpeg", 0) imb = img.copy() # Buat duplikat dari variabel img imb[imb>100]=255 # Buat citra biner imb[imb<100]=0 cv2.imshow ('Gambar', img) cv2.imshow ('Gambar BW', imb) k = cv2.waitKey(0) if k == 27: # menunggu hingga tombol ESC ditekan dan keluar cv2.destroyAllWindows() elif k == ord('s'): # menunggu hingga tombol 's' ditekan dan simpan cv2.imwrite('burung.png',img) cv2.imwrite('burungBW.bmp',imb) cv2.destroyAllWindows()5 atau frame per secon. Nah, dari sini, sebuah pengolahan video identik dengan pengolahan citra, hanya saja citranya dalam jumlah yang banyak dan berurutan. Untuk mengolah sebuah video pada pembahasan ini, kita akan membutuhkan sebuah video. Kalian bisa mengunduhnya pada tautan berikut (1MB) dengan format import cv2 # Panggil citra digital dengan nama anu.jpeg img = cv2.imread("anu.jpeg", 0) imb = img.copy() # Buat duplikat dari variabel img imb[imb>100]=255 # Buat citra biner imb[imb<100]=0 cv2.imshow ('Gambar', img) cv2.imshow ('Gambar BW', imb) k = cv2.waitKey(0) if k == 27: # menunggu hingga tombol ESC ditekan dan keluar cv2.destroyAllWindows() elif k == ord('s'): # menunggu hingga tombol 's' ditekan dan simpan cv2.imwrite('burung.png',img) cv2.imwrite('burungBW.bmp',imb) cv2.destroyAllWindows()6 dengan import cv2 # Panggil citra digital dengan nama anu.jpeg img = cv2.imread("anu.jpeg", 0) imb = img.copy() # Buat duplikat dari variabel img imb[imb>100]=255 # Buat citra biner imb[imb<100]=0 cv2.imshow ('Gambar', img) cv2.imshow ('Gambar BW', imb) k = cv2.waitKey(0) if k == 27: # menunggu hingga tombol ESC ditekan dan keluar cv2.destroyAllWindows() elif k == ord('s'): # menunggu hingga tombol 's' ditekan dan simpan cv2.imwrite('burung.png',img) cv2.imwrite('burungBW.bmp',imb) cv2.destroyAllWindows()7 seperti gambar di bawah ini. - Membaca Video dari direktori lokalMembaca sebuah video dari direktori lokal merupakan sebuah fungsi yang biasanya kita memasukkan videonya pada lokasi yang sama dengan dokumen python kita (sama dengan pembacaan citra pada bab 3.1). Hanya saja pada pembacaan video, perintahnya yang berbeda. Perintah atau fungsi tersebut adalah import cv2 # Panggil citra digital dengan nama anu.jpeg img = cv2.imread("anu.jpeg", 0) imb = img.copy() # Buat duplikat dari variabel img imb[imb>100]=255 # Buat citra biner imb[imb<100]=0 cv2.imshow ('Gambar', img) cv2.imshow ('Gambar BW', imb) k = cv2.waitKey(0) if k == 27: # menunggu hingga tombol ESC ditekan dan keluar cv2.destroyAllWindows() elif k == ord('s'): # menunggu hingga tombol 's' ditekan dan simpan cv2.imwrite('burung.png',img) cv2.imwrite('burungBW.bmp',imb) cv2.destroyAllWindows()8. Pada fungsi ini, kita diberikan dua pilihan masukan. Angka untuk masukan dari webcam dan string untuk masukan dari file. Semisal pada pembacaan video dari lokal direktori, kita dapat menggunakan perintah berikut: import cv2 # Panggil citra digital dengan nama anu.jpeg img = cv2.imread("anu.jpeg", 0) imb = img.copy() # Buat duplikat dari variabel img imb[imb>100]=255 # Buat citra biner imb[imb<100]=0 cv2.imshow ('Gambar', img) cv2.imshow ('Gambar BW', imb) k = cv2.waitKey(0) if k == 27: # menunggu hingga tombol ESC ditekan dan keluar cv2.destroyAllWindows() elif k == ord('s'): # menunggu hingga tombol 's' ditekan dan simpan cv2.imwrite('burung.png',img) cv2.imwrite('burungBW.bmp',imb) cv2.destroyAllWindows()9. Dari pembacaan video tersebut, kita juga membutuhkan sebuah perulangan untuk membaca video untuk semua frame yang ada di video tersebut. Dalam hal ini kita menggunakan import cv2 # Masukkan pustaka OpenCV # Membaca file video dan masukkan pada variabel cap = cv2.VideoCapture('video_ori.mp4') while(cap.isOpened()): # lakukan pembacaan pada semua frame ret, frame = cap.read() #frame siap untuk diolah gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # Tampilkan frame cv2.imshow('Frame Ori',frame) cv2.imshow('Frame Gray',gray) # Tahan frame selama 1ms if cv2.waitKey(1) & 0xFF == ord('q'): break # Lepas capture dan tutup semua jendela cap.release() cv2.destroyAllWindows()0 ketika video sedang dibuka/dibaca. Selama video terbaca, maka lakukan pengolahan citra pada tiap frame nya dan kita juga bisa menampilkan kondisi dari pengolahan citranya secara langsung. Untuk dapat menahan hasil pengolahan tiap frame nya, kita juga membutuhkan fungsi import cv2 # Masukkan pustaka OpenCV # Membaca file video dan masukkan pada variabel cap = cv2.VideoCapture('video_ori.mp4') while(cap.isOpened()): # lakukan pembacaan pada semua frame ret, frame = cap.read() #frame siap untuk diolah gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # Tampilkan frame cv2.imshow('Frame Ori',frame) cv2.imshow('Frame Gray',gray) # Tahan frame selama 1ms if cv2.waitKey(1) & 0xFF == ord('q'): break # Lepas capture dan tutup semua jendela cap.release() cv2.destroyAllWindows()1 seperti pada pembahasan bab 3.1, namun pada pembacaan video, nilai tunggunya tidak boleh bernilai 0 atau diam. Coba amati kode berikut: import cv2 # Masukkan pustaka OpenCV # Membaca file video dan masukkan pada variabel cap = cv2.VideoCapture('video_ori.mp4') while(cap.isOpened()): # lakukan pembacaan pada semua frame ret, frame = cap.read() #frame siap untuk diolah gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # Tampilkan frame cv2.imshow('Frame Ori',frame) cv2.imshow('Frame Gray',gray) # Tahan frame selama 1ms if cv2.waitKey(1) & 0xFF == ord('q'): break # Lepas capture dan tutup semua jendela cap.release() cv2.destroyAllWindows() Ketika kode di atas dijalankan, kurang lebih akan menghasilkan gambar seperti berikut ini: - Menggunakan capture webcamCapture camera menggunakan webcam dapat kita lakukan dengan menggunakan fungsi yang sama dengan membaca video, hanya saja isian fungsinya diberikan addres dari webcamnya. Pada umumnya, sebuah build-in webcam yang ada di laptop memiliki address cv2.imwrite('burung.png',img)0. Apabila kita menghubungkan sebuah eksternal webcam pada laptop kita, maka addressnya adalah cv2.imshow ('Gambar', img) cv2.waitKey(0) cv2.destroyAllWindows()9. Sedangkan ketika kita menggunakan sebuah PC atau miniPC (Raspi) yang tidak memiliki build-in webcam, maka address nya dimulai dari cv2.imwrite('burung.png',img)0 hingga berapa jumlah webcam yang tertancap secara berurutan akan menambah. Jadi, untuk fungsi yang akan diubah adalah pada baris import cv2 # Masukkan pustaka OpenCV # Membaca file video dan masukkan pada variabel cap = cv2.VideoCapture('video_ori.mp4') while(cap.isOpened()): # lakukan pembacaan pada semua frame ret, frame = cap.read() #frame siap untuk diolah gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # Tampilkan frame cv2.imshow('Frame Ori',frame) cv2.imshow('Frame Gray',gray) # Tahan frame selama 1ms if cv2.waitKey(1) & 0xFF == ord('q'): break # Lepas capture dan tutup semua jendela cap.release() cv2.destroyAllWindows()5. Kurang lebih kode lengkapnya seperti berikut ini. import cv2 # Masukkan pustaka OpenCV # Membaca file video dan masukkan pada variabel cap = cv2.VideoCapture(0) while(True): # lakukan pembacaan pada semua frame ret, frame = cap.read() #frame siap untuk diolah # ubah ke Gray dan ke biner gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # ubah dari gray ke biner biner = gray.copy() biner[biner>70]=255 biner[biner<70]=0 # Tampilkan frame cv2.imshow('Frame Ori',frame) cv2.imshow('Frame gray',gray) cv2.imshow('Frame BW',biner) # Tahan frame selama 1ms if cv2.waitKey(1) & 0xFF == ord('q'): break # Lepas capture dan tutup semua jendela cap.release() cv2.destroyAllWindows() Maka hasilnya kurang lebih akan seperti gambar berikut ini. Untuk menambah capture camera yang ada, semisal kita akan menggunakan 2 buah kamera, maka kita juga harus menambah variabel capture kameranya juga. Kurang lebih untuk kodenya seperti berikut ini. import cv2 # Masukkan pustaka OpenCV # Membaca file video dan masukkan pada variabel cap = cv2.VideoCapture(0) cap2 = cv2.VideoCapture(1) while(True): # lakukan pembacaan pada semua frame ret, frame = cap.read() #frame siap untuk diolah ret2, frame2 = cap2.read() # Tampilkan frame cv2.imshow('Kamera 1',frame) cv2.imshow('Kamera 2',frame2) # Tahan frame selama 1ms if cv2.waitKey(1) & 0xFF == ord('q'): break # Lepas capture dan tutup semua jendela cap.release() cv2.destroyAllWindows() Maka hasilnya kurang lebih akan seperti gambar berikut ini. Beberapa fungsi lainnya dari capture kamera yang biasanya dapat digunakan seperti dimensi capture dari kamera, set brightness, set contrass, dan sebagainya. Ada 18 fungsi yang bisa kita dapatkan. Berdasarkan pada parameter berikut, kita bisa menuliskannya dengan perintah import cv2 # Masukkan pustaka OpenCV # Membaca file video dan masukkan pada variabel cap = cv2.VideoCapture('video_ori.mp4') while(cap.isOpened()): # lakukan pembacaan pada semua frame ret, frame = cap.read() #frame siap untuk diolah gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # Tampilkan frame cv2.imshow('Frame Ori',frame) cv2.imshow('Frame Gray',gray) # Tahan frame selama 1ms if cv2.waitKey(1) & 0xFF == ord('q'): break # Lepas capture dan tutup semua jendela cap.release() cv2.destroyAllWindows()6 atau import cv2 # Masukkan pustaka OpenCV # Membaca file video dan masukkan pada variabel cap = cv2.VideoCapture('video_ori.mp4') while(cap.isOpened()): # lakukan pembacaan pada semua frame ret, frame = cap.read() #frame siap untuk diolah gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # Tampilkan frame cv2.imshow('Frame Ori',frame) cv2.imshow('Frame Gray',gray) # Tahan frame selama 1ms if cv2.waitKey(1) & 0xFF == ord('q'): break # Lepas capture dan tutup semua jendela cap.release() cv2.destroyAllWindows()7. Semisal kita akan mengubah tinggi dan lebar dimensi capture menjadi import cv2 # Masukkan pustaka OpenCV # Membaca file video dan masukkan pada variabel cap = cv2.VideoCapture('video_ori.mp4') while(cap.isOpened()): # lakukan pembacaan pada semua frame ret, frame = cap.read() #frame siap untuk diolah gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # Tampilkan frame cv2.imshow('Frame Ori',frame) cv2.imshow('Frame Gray',gray) # Tahan frame selama 1ms if cv2.waitKey(1) & 0xFF == ord('q'): break # Lepas capture dan tutup semua jendela cap.release() cv2.destroyAllWindows()8, kita dapat menggunakan: cap = cv2.VideoCapture(0) cap.set(3,640) cap.set(4,480) Untuk mendapatkan informasi dari import cv2 # Masukkan pustaka OpenCV # Membaca file video dan masukkan pada variabel cap = cv2.VideoCapture('video_ori.mp4') while(cap.isOpened()): # lakukan pembacaan pada semua frame ret, frame = cap.read() #frame siap untuk diolah gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # Tampilkan frame cv2.imshow('Frame Ori',frame) cv2.imshow('Frame Gray',gray) # Tahan frame selama 1ms if cv2.waitKey(1) & 0xFF == ord('q'): break # Lepas capture dan tutup semua jendela cap.release() cv2.destroyAllWindows()9, kita dapat menggunakan fungsi import cv2 # Masukkan pustaka OpenCV # Membaca file video dan masukkan pada variabel cap = cv2.VideoCapture(0) while(True): # lakukan pembacaan pada semua frame ret, frame = cap.read() #frame siap untuk diolah # ubah ke Gray dan ke biner gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # ubah dari gray ke biner biner = gray.copy() biner[biner>70]=255 biner[biner<70]=0 # Tampilkan frame cv2.imshow('Frame Ori',frame) cv2.imshow('Frame gray',gray) cv2.imshow('Frame BW',biner) # Tahan frame selama 1ms if cv2.waitKey(1) & 0xFF == ord('q'): break # Lepas capture dan tutup semua jendela cap.release() cv2.destroyAllWindows()0 atau import cv2 # Masukkan pustaka OpenCV # Membaca file video dan masukkan pada variabel cap = cv2.VideoCapture(0) while(True): # lakukan pembacaan pada semua frame ret, frame = cap.read() #frame siap untuk diolah # ubah ke Gray dan ke biner gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # ubah dari gray ke biner biner = gray.copy() biner[biner>70]=255 biner[biner<70]=0 # Tampilkan frame cv2.imshow('Frame Ori',frame) cv2.imshow('Frame gray',gray) cv2.imshow('Frame BW',biner) # Tahan frame selama 1ms if cv2.waitKey(1) & 0xFF == ord('q'): break # Lepas capture dan tutup semua jendela cap.release() cv2.destroyAllWindows()1. dari nilai balikan tersebut, biasanya kita dapat menggunakannya untuk pengolahan citra yang membutuhkan variabel dari dimensi capture.
- Menyimpan hasil capture menjadi videoPada bab sebelumnya, kita dapat menulis (membuat) sebuah citra baru dan menyimpannya mengunakan perintah import cv2 # Panggil citra digital dengan nama anu.jpeg img = cv2.imread("anu.jpeg", 0) imb = img.copy() # Buat duplikat dari variabel img imb[imb>100]=255 # Buat citra biner imb[imb<100]=0 cv2.imshow ('Gambar', img) cv2.imshow ('Gambar BW', imb) k = cv2.waitKey(0) if k == 27: # menunggu hingga tombol ESC ditekan dan keluar cv2.destroyAllWindows() elif k == ord('s'): # menunggu hingga tombol 's' ditekan dan simpan cv2.imwrite('burung.png',img) cv2.imwrite('burungBW.bmp',imb) cv2.destroyAllWindows()0. Akan tetapi pada pembahasan kali ini, kita akan menyimpan sebuah citra tersebut secara berurutan tiap frame yang terbentuk menjadi sebuah video. Fungsi yang bisa kita gunakan adalah import cv2 # Masukkan pustaka OpenCV # Membaca file video dan masukkan pada variabel cap = cv2.VideoCapture(0) while(True): # lakukan pembacaan pada semua frame ret, frame = cap.read() #frame siap untuk diolah # ubah ke Gray dan ke biner gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # ubah dari gray ke biner biner = gray.copy() biner[biner>70]=255 biner[biner<70]=0 # Tampilkan frame cv2.imshow('Frame Ori',frame) cv2.imshow('Frame gray',gray) cv2.imshow('Frame BW',biner) # Tahan frame selama 1ms if cv2.waitKey(1) & 0xFF == ord('q'): break # Lepas capture dan tutup semua jendela cap.release() cv2.destroyAllWindows()3. Pada fungsi ini, kita harus menentukan secara spesifik format keluaran video tersebut, semisal import cv2 # Masukkan pustaka OpenCV # Membaca file video dan masukkan pada variabel cap = cv2.VideoCapture(0) while(True): # lakukan pembacaan pada semua frame ret, frame = cap.read() #frame siap untuk diolah # ubah ke Gray dan ke biner gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # ubah dari gray ke biner biner = gray.copy() biner[biner>70]=255 biner[biner<70]=0 # Tampilkan frame cv2.imshow('Frame Ori',frame) cv2.imshow('Frame gray',gray) cv2.imshow('Frame BW',biner) # Tahan frame selama 1ms if cv2.waitKey(1) & 0xFF == ord('q'): break # Lepas capture dan tutup semua jendela cap.release() cv2.destroyAllWindows()4. Oleh karenanya kita juga harus menentukan secara spesifik encoder import cv2 # Masukkan pustaka OpenCV # Membaca file video dan masukkan pada variabel cap = cv2.VideoCapture(0) while(True): # lakukan pembacaan pada semua frame ret, frame = cap.read() #frame siap untuk diolah # ubah ke Gray dan ke biner gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # ubah dari gray ke biner biner = gray.copy() biner[biner>70]=255 biner[biner<70]=0 # Tampilkan frame cv2.imshow('Frame Ori',frame) cv2.imshow('Frame gray',gray) cv2.imshow('Frame BW',biner) # Tahan frame selama 1ms if cv2.waitKey(1) & 0xFF == ord('q'): break # Lepas capture dan tutup semua jendela cap.release() cv2.destroyAllWindows()5 yang akan kita gunakan, berapa frame per detiknya (fps), dimensi tiap framenya, dan setidaknya penggunaan warna import cv2 # Masukkan pustaka OpenCV # Membaca file video dan masukkan pada variabel cap = cv2.VideoCapture(0) while(True): # lakukan pembacaan pada semua frame ret, frame = cap.read() #frame siap untuk diolah # ubah ke Gray dan ke biner gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # ubah dari gray ke biner biner = gray.copy() biner[biner>70]=255 biner[biner<70]=0 # Tampilkan frame cv2.imshow('Frame Ori',frame) cv2.imshow('Frame gray',gray) cv2.imshow('Frame BW',biner) # Tahan frame selama 1ms if cv2.waitKey(1) & 0xFF == ord('q'): break # Lepas capture dan tutup semua jendela cap.release() cv2.destroyAllWindows()6 atau tidak (grayscale) pada flag yang telah disediakan sudah terisi dan diterapkan pada encodernya. FourCC merupakan sebuah 4-byte code yang digunakan sebagai encoder video. Beberapa daftar yang biasa digunakan adalah sebagai berikut
Untuk menggunakan atau menerapkan FourCC pada OpenCV kita, kita dapat menggunaka perintah import cv2 # Masukkan pustaka OpenCV # Membaca file video dan masukkan pada variabel cap = cv2.VideoCapture(0) while(True): # lakukan pembacaan pada semua frame ret, frame = cap.read() #frame siap untuk diolah # ubah ke Gray dan ke biner gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # ubah dari gray ke biner biner = gray.copy() biner[biner>70]=255 biner[biner<70]=0 # Tampilkan frame cv2.imshow('Frame Ori',frame) cv2.imshow('Frame gray',gray) cv2.imshow('Frame BW',biner) # Tahan frame selama 1ms if cv2.waitKey(1) & 0xFF == ord('q'): break # Lepas capture dan tutup semua jendela cap.release() cv2.destroyAllWindows()7 atau import cv2 # Masukkan pustaka OpenCV # Membaca file video dan masukkan pada variabel cap = cv2.VideoCapture(0) while(True): # lakukan pembacaan pada semua frame ret, frame = cap.read() #frame siap untuk diolah # ubah ke Gray dan ke biner gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # ubah dari gray ke biner biner = gray.copy() biner[biner>70]=255 biner[biner<70]=0 # Tampilkan frame cv2.imshow('Frame Ori',frame) cv2.imshow('Frame gray',gray) cv2.imshow('Frame BW',biner) # Tahan frame selama 1ms if cv2.waitKey(1) & 0xFF == ord('q'): break # Lepas capture dan tutup semua jendela cap.release() cv2.destroyAllWindows()8 untuk MJPG. Begitu juga ketika kita menggunakan import cv2 # Masukkan pustaka OpenCV # Membaca file video dan masukkan pada variabel cap = cv2.VideoCapture(0) while(True): # lakukan pembacaan pada semua frame ret, frame = cap.read() #frame siap untuk diolah # ubah ke Gray dan ke biner gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # ubah dari gray ke biner biner = gray.copy() biner[biner>70]=255 biner[biner<70]=0 # Tampilkan frame cv2.imshow('Frame Ori',frame) cv2.imshow('Frame gray',gray) cv2.imshow('Frame BW',biner) # Tahan frame selama 1ms if cv2.waitKey(1) & 0xFF == ord('q'): break # Lepas capture dan tutup semua jendela cap.release() cv2.destroyAllWindows()9 atau import cv2 # Masukkan pustaka OpenCV # Membaca file video dan masukkan pada variabel cap = cv2.VideoCapture(0) cap2 = cv2.VideoCapture(1) while(True): # lakukan pembacaan pada semua frame ret, frame = cap.read() #frame siap untuk diolah ret2, frame2 = cap2.read() # Tampilkan frame cv2.imshow('Kamera 1',frame) cv2.imshow('Kamera 2',frame2) # Tahan frame selama 1ms if cv2.waitKey(1) & 0xFF == ord('q'): break # Lepas capture dan tutup semua jendela cap.release() cv2.destroyAllWindows()0. Kalian bisa mengubah argumen pada fungsinya. Kode berikut merupakan sebuah contoh kode untuk menyimpan video yang diambil dari kamera webcam. import cv2 cap = cv2.VideoCapture(0) # seting Codec yang akan digunakan yaitu XVID fourcc = cv2.VideoWriter_fourcc(*'XVID') out = cv2.VideoWriter('keluaran.mp4',fourcc, 20.0, (640,480)) while(cap.isOpened()): ret, frame = cap.read() if ret==True: # gunakan baris dibawah ini jika dibutuhkan #frame = cv2.flip(frame,0) out.write(frame) cv2.imshow('frame',frame) if cv2.waitKey(1) & 0xFF == ord('q'): break else: break # matikan semua perangkat yang aktif cap.release() out.release() cv2.destroyAllWindows() Kode diatas melakukan capture kamera setiap framenya. Pada perulangan yang terjadi (apabila kamera telah dibuka), frame akan dibaca. Setelah itu, pada bagian ini frame tersebut dapat kita olah semisal melakukan perubahan flip atau pengubahan ruang warna ke grayscale. Nah setelah frame dilakukan pengolahan, maka langkah selanjutnya akan disimpan menggunakan fungsi import cv2 # Masukkan pustaka OpenCV # Membaca file video dan masukkan pada variabel cap = cv2.VideoCapture(0) cap2 = cv2.VideoCapture(1) while(True): # lakukan pembacaan pada semua frame ret, frame = cap.read() #frame siap untuk diolah ret2, frame2 = cap2.read() # Tampilkan frame cv2.imshow('Kamera 1',frame) cv2.imshow('Kamera 2',frame2) # Tahan frame selama 1ms if cv2.waitKey(1) & 0xFF == ord('q'): break # Lepas capture dan tutup semua jendela cap.release() cv2.destroyAllWindows()1 pada masing-masing framenya. Selama kamera masih terbuka, maka frame akan terus menyimpan dan menjadikannya sebuah video. Untuk menghentikan bukaan kamera, dapat menekan tombol cv2.imshow ('Gambar', img) cv2.waitKey(0) cv2.destroyAllWindows()5 pada keyboard kalian dan proses penyimpanan tiap frame menjadi video sudah selesai. Video yang disimpan diberi nama import cv2 # Masukkan pustaka OpenCV # Membaca file video dan masukkan pada variabel cap = cv2.VideoCapture(0) cap2 = cv2.VideoCapture(1) while(True): # lakukan pembacaan pada semua frame ret, frame = cap.read() #frame siap untuk diolah ret2, frame2 = cap2.read() # Tampilkan frame cv2.imshow('Kamera 1',frame) cv2.imshow('Kamera 2',frame2) # Tahan frame selama 1ms if cv2.waitKey(1) & 0xFF == ord('q'): break # Lepas capture dan tutup semua jendela cap.release() cv2.destroyAllWindows()3. Lalu mengapa video yang sudah disimpan, ketika diputar, video nya tidak menghasilkan suara? nah... pada kasus ini, kita hanya menyimpan sebuah video dalam artian menyipan setiap frame yang berhasil di capture melalui kamera menjadi sebuah video. Dengan begitu, audio tidak ikut tersimpan. Untuk menyimpannya, coba cari saja dulu ya... (saya belum pernah mencobanya, karena fokus bahasannya bukan pengolahan audio melainkan video atau citra beruntun) :* Untuk tempat penyimpanan videonya, berada pada letak dokumen disimpan. Jadi masih satu direktori dengan file import cv2 # Masukkan pustaka OpenCV # Membaca file video dan masukkan pada variabel cap = cv2.VideoCapture(0) cap2 = cv2.VideoCapture(1) while(True): # lakukan pembacaan pada semua frame ret, frame = cap.read() #frame siap untuk diolah ret2, frame2 = cap2.read() # Tampilkan frame cv2.imshow('Kamera 1',frame) cv2.imshow('Kamera 2',frame2) # Tahan frame selama 1ms if cv2.waitKey(1) & 0xFF == ord('q'): break # Lepas capture dan tutup semua jendela cap.release() cv2.destroyAllWindows()4 nya ya... seperti gambar berikut. 3.3 Menggunakan Fungsi Drawing
Penggunaan fungsi menggambar (Drawing) sebuah objek, biasanya digunakan untuk menunjukkan sebuah operasi berhasil atau gagal dilakukan oleh sistem yang dibangun. Jadi, fungsi ini nantinya akan sering kita gunakan pada pengenalan pola, akuisisi objek, pemberian informasi, penunjukan letak, atau pemberian informasi kepada manusia (interface). Nah, dari sini berbagai informasi, selain citra itu sendiri, dapat didapatkan. Dengan teknik menggambarkan dimana letak fokus informasinya pada sebuah pengolahan citra tersebut, manusia akan lebih mudah mengetahuinya. Oleh karenanya, pastikan kalian sudah memahami betul teknik ini ya... - Kode DasarPada teknik menggambar menggunakan OpenCV, kode dasar yang sering kalian gunakan dan argumen-argumennya, seperti berikut ini: Apa fungsi cv2?cv2.cvtColor(source_img, color_space) merupakan fungsi yang di gunakan untuk melakukan konversi color space. Seperti yang sudah kita dibahas sebelumnya defaul dari Opencv merupakan BGR.
cv2 waitKey untuk apa?Dan fungsi “cv2.waitKey(0)” berfungsi untuk menunggu perintah selanjutnya. Pada baris terakhir dari program di atas, digunakan atau berfungsi untuk menghentikan Open CV. Dengan menekan tombol “Esc” pada keyboard, Open CV dan kamera akan otomatis berhenti(off).
|