ii
MODUL PRAKTIKUM PENGOLAHAN CITRA OPENCV 2017/2018
Deskripsi Mata Kuliah
Mata kuliah ini memberikan pengetahuan dan ketrampilan kepada mahasiswa untuk
melakukan analisa terhadap sebuah citra komputer, ditinjau atas algoritma yang
digunakan untuk memecahkan masalah serta berbagai metode yang merepresentasikan hasil
pengolahan citranya.
Tujuan Perkuliahan
Setelah mengikuti perkuliahan, mahasiswa akan dapat memahami cara kerja sebuah
Program penglihatan komputer (computer vision) berdasarkan metode-metode yang
digunakan, kemudian dapat melakukan pemrograman berbagai permasalahan.
Deskripsi Isi Perkuliahan
Bahasan dalam praktikum ini mencakup penginstallan openCV, pengaksesan gambar dan
video, menggambar menggunakan fungsi dari library openCV, penggunaan mouse sebagai
inputan, menggunakan fungsi trackbar, Image Blending, segmentasi warna, Morphological
Transformations, Dan Juga penandaan objek.
iii
MODUL PRAKTIKUM PENGOLAHAN CITRA OPENCV 2017/2018
Daftar Isi
Halaman
Daftar Isi ..................................................................................................................... iii
library OpenCV Dan Pemrograman Python ........................................................... 5
1.1 Dasar Teori ........................................................................................................ 5
1.2 Percobaan ........................................................................................................... 6
Gambar dan Video ..................................................................................................... 7
2.1 Dasar Teori ........................................................................................................ 7
2.2 Percobaan ........................................................................................................... 9
Menggambar menggunakan openCV ....................................................................... 12
3.1 Dasar Teori ........................................................................................................ 12
3.2 Percobaan ........................................................................................................... 14
Inputan dari perangkat mouse .................................................................................. 16
4.1 Dasar Teori ........................................................................................................ 16
4.2 Percobaan ........................................................................................................... 16
4.3 Soal Latihan ....................................................................................................... 17
Trackbar as the Color Palette ................................................................................... 18
5.1 Dasar Teori ........................................................................................................ 18
5.2 Percobaan ........................................................................................................... 19
Image Blending ........................................................................................................... 20
6.1 Dasar Teori ........................................................................................................ 20
6.2 Percobaan ........................................................................................................... 20
Object Tracking .......................................................................................................... 22
7.1 Dasar Teori ........................................................................................................ 22
7.2 Percobaan ........................................................................................................... 22
iv
MODUL PRAKTIKUM PENGOLAHAN CITRA OPENCV 2017/2018
Morphological Transformations ............................................................................... 24
8.1 Dasar Teori ........................................................................................................ 24
8.2 Percobaan ........................................................................................................... 24
Menandai objek .......................................................................................................... 26
9.1 Dasar Teori ........................................................................................................ 26
9.2 Percobaan ........................................................................................................... 27
5
MODUL PRAKTIKUM PENGOLAHAN CITRA OPENCV 2017/2018
Pertemuan 1
library OpenCV dan pemrograman python
Tujuan Intruksional : Pengantar
Tujuan dari materi ini adalah mengenalkan library OpenCV dan pemrograman python.
Kompetensi Yang Diharapkan : Mahasiswa diharapkan dapat memahami konsep penggunan OpenCV dan dapat
menerapkannya di bahasa pemrograman python.
Waktu Pertemuan : 100 Menit
1.1 Dasar Teori
Python adalah sebuah bahasa pemrograman interpreter (tidak perlu melakukan compile
program) yang bersifat multiplatform. Python sendiri memiliki aturan khusus dalam
melakukan implementasi kode program. Adanya aturan-aturan ini diharapkan dapat
mempermudah pengembang untuk membaca dan menulis kode program, serta untuk
melakukan debugging. Beberapa peraturan dari bahasa pemrograman python adalah:
1. Tidak adanya tanda “{}” (kurung kurawal) untuk membuat blok program, melainkan
menggunakan indensasi berupa 1x tab, atau 4x spasi (pilih salah satu)
2. Setiap perintah/code, tidak diakhiri dengan tanda “;” (titik koma), melainkan
menggunakan karakter “Enter”. Kecuali untuk pengkondisian (seperti if, if-else, for,
dan while) menggunakan karakter “:” (titik dua) sebelum karakter “Enter”
3. Tidak menggunakan karakter “//” (double slash) untuk komentar, melainkan
menggunakan karakter “#” (pagar).
4. Tidak adanya tipe data. Sehingga untuk melakukan inisialisasi nilai dari suatu data,
cukup dengan mengetikkan “nama_variabel = isi_variabel” tanpa tanda kutip.
OpenCV adalah sebuah library yang berfungsi untuk melakukan pemrosesan citra.
Pemrosesan ini digunakan untuk mengambil informasi penting dari suatu citra. OpenCV
sendiri bersifat multi-Platform dan open-source. OpenCV dapat digunakan di bahasa
pemrograman C/C++, java, python, javascript. OpenCV juga dapat diimplementasikan di
berbagai OS yang berbeda, yakni OS windows, linux, fedora, macOS (apple), dan android.
selama praktikum ini, kita akan mengimplementasikan openCV dalam bahasa
pemrograman python. Untuk OS yang digunakan, dibebaskan kepada praktikan, sedangkan
untuk penginstallan opencv, berikut ini langkah-langkahnya:
1. Pastikan “python” dan “pip” telah terinstall di komputer masing-masing, boleh
menggunakan python2.7 ataupun python3 (praktikan dianggap telah menginstall
python dan pip)*
6
MODUL PRAKTIKUM PENGOLAHAN CITRA OPENCV 2017/2018
2. Buka command prompt/CMD dengan menggunakan mode administrator. (buka
terminal dengan hak akses root untuk linux)
3. Pastikan komputer terhubung dengan internet.
4. Ketikkan “pip install numpy” tanpa tanda petik. Python akan menginstall
menggunakan akses internet. Tunggu hingga selesai.
5. Ketikkan “pip install opencv-python” tanpa tanda petik. Python akan menginstall
menggunakan akses internet. Tunggu hingga selesai.
6. Buka program aplikasi python, lalu ketikkan “import cv2” tanpa tanda petik. Jika tidak
ada masalah (tidak muncul tulisan apapun), berarti penginstallan telah sukses.
*jika anda menggunakan linux, python dan pip telah terinstall secara otomatis saat
penginstallan linux
1.2 Percobaan
Percobaan 1
Tulis hasilnya disini dan jelaskan isi program
#latihan menggunakan bahasa pemrograman python import cv2 #cara menggunakan library opencv di python tulisan = “hasil kalkulasi =” #membuat string ulang = 1 #membuat nilai integer pecahan = 0.5 #membuat nilai float/pecahan #membuat perulangan while while (ulang <= 5): print (ulang, “dikali”, pecahan) print (tulisan , ulang*pecahan) #catatan: jika menggunakan python 2.7, hilangkan tanda buka kurung #dan tutup kurung pada perintah print ulang=ulang+1 print(“selesai…”)
7
MODUL PRAKTIKUM PENGOLAHAN CITRA OPENCV 2017/2018
Pertemuan 2
Gambar dan Video
Tujuan Intruksional :
Bertujuan untuk menampilkan dan menyimpan gambar dan video menggunakan OpenCV
Kompetensi Yang Diharapkan : Mahasiswa diharapkan dapat memahami konsep penggunan OpenCV dalam
mengakses gambar dan video.
Waktu Pertemuan : 100 Menit
2.1 Dasar Teori
Langkah awal untuk mengolah citra adalah menyiapkan citra. Untuk
menggunakan/membaca citra tidak bergerak (gambar), kita menggunakan fungsi:
cv2.imread(“nama_file.jpg”, index)
- File yang dapat dibaca dapat berupa file .jpg maupun file .png.
- Untuk index, terdapat tiga jenis:
o cv2.IMREAD_COLOR (1)
o cv2.IMREAD_GRAYSCALE (0)
o cv2.IMREAD_UNCHANGED (-1)
- untuk penulisan index, dapat menggunakan integer (contoh:
cv2.imread(“nama_file.png”, 1) ataupun menggunakan string (contoh:
cv2.imread(“nama_file.png”, cv2.IMREAD_COLOR)
Langkah kedua adalah menampilkan gambar ke layar, fungsinya adalah:
cv2.imshow('gambar', img)
- 'gambar ' adalah nama judul dari tampilan window kita.
- Sedangkan img adalah citra yang akan kita tampilkan dilayar
Fungsi cv2.imshow() harus diikuti dengan fungsi penerima inputan keyboard. Maka
langkah ketiga adalah menambahkan fungsi:
cv2.waitKey(0) & 0xFF
- Sesuai dengan artinya, waitKey ini berfungsi untuk menunggu inputan yang diberikan
8
MODUL PRAKTIKUM PENGOLAHAN CITRA OPENCV 2017/2018
dari keyboard. Angka yang ada di fungsi tersebut adalah lamanya waktu untuk
menghitung mundur. Jika fungsi tersebut diisi dengan angka 0, maka fungsi ini akan
melakukan delay/pause selama tombol di keyboard tidak ada yang ditekan. Namun
jika integer yang diberikan diatas 0 ( >=1 ), maka fungsi akan menunggu dalam
satuan milidetik (1 detik = 1000 milidetik). Setelah itu fungsi akan mengeksekusi
perintah berikutnya.
- Sedangkan “& 0xFF” adalah kode yang diberikan jika komputer yang digunakan
adalah komputer 64 bit.
- Untuk fungsi ini, cukup ditulis sekali. Berbeda dengan fungsi imshow() yang dapat
ditulis lebih dari satu. Fungsi ini ditulis setelah fungsi imshow() terakhir.
Jika ingin menyimpan gambar, Langkah berikutnya adalah menambahkan fungsi:
cv2.imwrite('nama_file.png',img)
- 'nama_file.png' adalah nama file untuk citra yang akan kita simpan.
- Format yang dapat digunakan adalah .jpg dan .png.
- Img adalah citra yang akan kita simpan
Kemudian langkah terakhir adalah menambahkan fungsi untuk menutup semua window
openCV dari layar monitor. Fungsinya adalah:
cv2.destroyAllWindows()
Selain menggunakan gambar diam, kita juga dapat menggunakan gambar bergerak/video.
Untuk memproses video, kita memerlukan perulangan while untuk menampilkan semua frame
dari video.
Langkah pertama untuk mengakses file video adalah membuat objek VideoCapture.
Adapun perintahnya adalah sebagai berikut:
Cap = cv2.VideoCapture('nama_file.avi')
- Cap adalah nama variabel untuk objek VideoCapture dari video yang akan kita akses.
- 'nama_file.avi' adalah nama file dari video yang akan kita akses.
- Format yang dapat digunakan dapat berupa .avi dan .mp4.
9
MODUL PRAKTIKUM PENGOLAHAN CITRA OPENCV 2017/2018
Sedangkan perintah untuk mengambil citra dari frame per frame video adalah sebagai
berikut:
ret, img = cap.read()
- ret adalah variable yang berisi nilai true atau false. Jika video sukses diakses, maka
variable ini akan bernilai true, dan sebaliknya
- img adalah “frame sekarang” yang telah diambil dari file video.
- Cap adalah nama variabel untuk objek VideoCapture dari video yang sudah kita buat
sebelumnya.
Jika kita telah selesai mengeksekusi video. Maka sebelum menggunakan fungsi
cv2.destroyAllWindows(), kita harus menambahkan fungsi berikut ini:
cap.release()
- Cap adalah nama variabel untuk objek VideoCapture dari video yang sudah kita buat
sebelumnya.
- Fungsi ini berfungsi untuk meng-eject file video sehingga dapat digunakan oleh
aplikasi lain.
Jika ingin mengakses kamera, maka pada fungsi cv2.VideoCapture('nama_file.avi'), kita
ganti dengan cv2.VideoCapture(0) untuk akses kamera default, cv2.VideoCapture(1) untuk
akses kamera default kedua, cv2.VideoCapture(2) untuk akses kamera ketiga, dan seterusnya
(nilai harus berupa integer positif).
2.2 Percobaan
Percobaan 1
#latihan menampilkan gambar dan menyimpan gambar import cv2 # Load an color image in grayscale img = cv2.imread('messi.jpg',0) #pastikan lokasi gambar berada di satu folder cv2.imshow('gambar abu abu',img) tombol = cv2.waitKey(0) & 0xFF #jika menggunakan 32 bit, hapus “& 0xFF” if tombol == ord('s'): #gambar akan disimpan jika tombol ‘s’ kecil ditekan
cv2.imwrite('messiGray.png',img) cv2.destroyAllWindows()
10
MODUL PRAKTIKUM PENGOLAHAN CITRA OPENCV 2017/2018
Tulis hasilnya disini dan jelaskan isi program
Percobaan 2
Tulis hasilnya disini dan jelaskan isi program
Percobaan 3
#latihan menampilkan video import cv2 kamera = cv2.VideoCapture(“batman.mp4”) # pastikan lokasi video berada di satu folder while(True): # Capture frame-by-frame ret, img = kamera.read() # Display the resulting frame cv2.imshow('streaming webcam', img) if cv2.waitKey(1) & 0xFF == ord('q'): break #program akan berhenti jika tombol ‘q’ kecil ditekan # When everything done, release the capture kamera.release() cv2.destroyAllWindows()
import cv2 kamera = cv2.VideoCapture(0) #mengakses webcam pada laptop (kamera default) while(True): # Capture frame-by-frame ret, img = kamera.read() # Display the resulting frame cv2.imshow('streaming webcam', img) if cv2.waitKey(1) & 0xFF == ord('q'): break #program akan berhenti jika tombol ‘q’ kecil ditekan # When everything done, release the capture kamera.release() cv2.destroyAllWindows()
11
MODUL PRAKTIKUM PENGOLAHAN CITRA OPENCV 2017/2018
Tulis hasilnya disini dan jelaskan isi program
12
MODUL PRAKTIKUM PENGOLAHAN CITRA OPENCV 2017/2018
Pertemuan 3
Menggambar menggunakan openCV
Tujuan Intruksional :
Tujuan dari materi ini adalah menggunakan OpenCV untuk menggambar.
Kompetensi Yang Diharapkan : Mahasiswa diharapkan dapat memahami konsep menggambar menggunakan fungsi
OpenCV.
Waktu Pertemuan : 100 Menit
3.1 Dasar Teori
Dalam melakukan pengolahan citra, terkadang kita perlu untuk membuat garis, lingkaran,
kotak, dan membuat tulisan pada gambar. Dalam library OpenCV, telah disediakan fungsi
fungsi tersebut. Yang pertama yaitu garis, penulisan fungsi yang digunakan adalah:
cv2.line(img,(0,0),(400,400),(255,0,0),5)
- Img adalah gambar yang akan kita beri garis
- (0,0) adalah koordinat (x,y) yang merupakan pangkal dari garis yang akan dibuat
- (400,400) adalah koordinat (x,y) yang merupakan ujung dari garis yang akan dibuat
- (255,0,0) adalah warna garis yang akan dibuat dalam format (blue,green,red). Dalam
kasus ini, garis yang akan dibuat berwarna biru
- 5 adalah ketebalan dari garis yang akan dibuat dalam satuan pixel. Dalam kasus ini,
garis akan dibuat dengan ketebalan 5 piksel
Jika kita ingin membuat kotak, maka penulisan fungsi yang digunakan adalah:
cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)
- Img adalah gambar yang akan kita beri kotak
- (384,0) adalah koordinat (x,y) yang merupakan titik “kiri atas” dari kotak yang akan
dibuat
- (510,128) adalah koordinat (x,y) yang merupakan titik “kanan bawah” dari kotak yang
akan dibuat
- (0,255,0) adalah warna kotak yang akan dibuat dalam format (blue,green,red). Dalam
kasus ini, kotak yang akan dibuat berwarna hijau
- 3 adalah ketebalan dari kotak yang akan dibuat dalam satuan pixel. Dalam kasus ini,
kotak akan dibuat dengan ketebalan 3 piksel. Jika nilai ini diisi dengan nilai negative,
maka kotak akan berwarna secara penuh (fill)
13
MODUL PRAKTIKUM PENGOLAHAN CITRA OPENCV 2017/2018
Jika kita ingin membuat lingkaran, maka penulisan fungsi yang digunakan adalah:
cv2.circle(img,(447,65), 63, (0,0,255), -1)
- Img adalah gambar yang akan kita beri kotak
- (447, 65) adalah koordinat (x,y) yang merupakan titik pusat lingkaran yang akan
dibuat
- 63 adalah panjang jari-jari dari lingkaran yang akan dibuat dalam satuan pixel
- (0,0,255) adalah warna lingkaran yang akan dibuat dalam format (blue,green,red).
Dalam kasus ini, lingkaran yang akan dibuat berwarna merah
- -1 adalah ketebalan dari lingkaran yang akan dibuat dalam satuan pixel. Dalam kasus
ini, lingkaran akan dibuat berwarna merah secara penuh (fill). Jika nilai ini diisi
dengan nilai positif, maka lingkaran hanya akan berwarna merah pada garis outline
dengan ketebalan pixel sesuai nilai
Jika kita ingin membuat ellipse, maka penulisan fungsi yang digunakan adalah:
cv2.ellipse(img,(256,256),(100,50),1,0,180, (127,127,127),-1)
- Img adalah gambar yang akan kita beri ellipse
- (256,256) adalah koordinat (x,y) yang merupakan titik pusat ellipse yang akan dibuat
- (100,50) adalah panjang “jari-jari pendek” dan “jari-jari panjang” dari ellipse yang
akan dibuat dalam satuan pixel
- 1 adalah derajat rotasi putar yang berlawanan dengan arah jarum jam
- 0 adalah posisi derajat dari pangkal busur ellipse yang akan dibuat
- 180 adalah posisi derajat dari ujung busur ellipse yang akan dibuat
- (127,127,127) adalah warna ellipse yang akan dibuat dalam format (blue,green,red).
Dalam kasus ini, ellipse yang akan dibuat berwarna abu-abu
- -1 adalah ketebalan dari ellipse yang akan dibuat dalam satuan pixel. Dalam kasus ini,
ellipse akan dibuat berwarna merah secara penuh (fill). Jika nilai ini diisi dengan nilai
positif, maka ellipse hanya akan berwarna merah pada garis outline dengan ketebalan
pixel sesuai nilai
Jika kita ingin membuat Polygon, maka kita tentukan titik sudutnya terlebih dahulu, lalu
membuat fungsinya seperti berikut:
pts = np.array([[x1,y1],[ x2,y2],[x3,y3],[x4,y4]], np.int32)
pts = pts.reshape((-1,1,2))
cv2.polylines(img,[pts],True,(0,255,255))
14
MODUL PRAKTIKUM PENGOLAHAN CITRA OPENCV 2017/2018
- Nilai x1,y1, x2,y2, x3,y3, x4,y4 adalah titik koordinat sudut-sudut Polygon yang akan
dibuat
- Img adalah gambar yang akan kita beri kotak
- Pts adalah kumpulan titik sudut dari Polygon
- True mengindikasikan bahwa titik sudut pangkal & akhir dihubungkan dengan garis.
Jika nilai ini diganti dengan False, maka titik sudut pangkal & akhir tidak
dihubungkan dengan garis
- (0,255,255) adalah warna kotak yang akan dibuat dalam format (blue,green,red).
Jika kita ingin membuat teks, maka penulisan fungsi yang digunakan adalah:
cv2.putText(img,'OpenCV',(10,500), cv2.FONT_HERSHEY_SIMPLEX, 4,(255,255,255),2)
- Img adalah gambar yang akan kita beri kotak
- 'OpenCV' adalah tulisan yang akan kita buat pada gambar
- (10,500) adalah titik koordinat (x,y) dimana tulisan akan dibuat
- cv2.FONT_HERSHEY_SIMPLEX adalah tipe Font yang digunakan. Untuk lebih
jelasnya dapat dilihat di domentasinya (docs.opencv.org)
- 4 adalah size dari font yang akan dibuat
- (255,255,255) adalah warna font yang akan dibuat dalam format (blue,green,red).
Dalam kasus ini, font yang akan dibuat berwarna putih
- 2 adalah ketebalan dari font yang akan dibuat dalam satuan pixel.
3.2 Percobaan
Percobaan 1
import numpy as np
import cv2
# Create a black image
img = np.zeros((512,512,3), np.uint8)
cv2.line(img,(0,0),(511,511),(255,0,0),5)
cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)
cv2.circle(img,(447,63), 63, (0,0,255), -1)
cv2.ellipse(img,(256,256),(100,50),0,0,180,255,-1)
pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts = pts.reshape((-1,1,2))
cv2.polylines(img,[pts],True,(0,255,255))
cv2.putText(img,'OpenCV',(10,500), cv2.FONT_HERSHEY_SIMPLEX,
4,(255,255,255),2,cv2.LINE_AA)
cv2.imshow('gambar', img)
cv2.waitKey(0) & 0xFF
cv2.destroyAllWindows()
15
MODUL PRAKTIKUM PENGOLAHAN CITRA OPENCV 2017/2018
Tulis hasilnya disini dan jelaskan isi program
16
MODUL PRAKTIKUM PENGOLAHAN CITRA OPENCV 2017/2018
import cv2
events = [i for i in dir(cv2) if 'EVENT' in i]
print (events)
Pertemuan 4
Inputan dari perangkat mouse
Tujuan Intruksional :
Bertujuan untuk menerima inputan dari mouse menggunakan OpenCV.
Kompetensi Yang Diharapkan : Mahasiswa diharapkan dapat memahami konsep penggunan mouse dalam
OpenCV.
Waktu Pertemuan : 100 Menit
4.1 Dasar Teori
Dalam pengolahan citra, terkadang kita membutuhkan inputan dari mouse untuk
membantu pengolahan citra menjadi lebih efisien. Dalam openCV, hal ini sudah tersedia
dalam fungsi cv2.setMouseCallback(). Adapun cara penggunaannya adalah pertama kita harus
membuat program fungsi yang akan dijalankan saat ada inputan dari mouse, sebelum kita
menggunakan fungsi cv2.setMouseCallback(). Ada banyak inputan dari mouse, beberapa
diantaranya adalah klik kiri, double klik kiri, klik kanan, double klik kanan, klik tengah,
double klik tengah, geser pointer mouse, dan masih banyak lagi. Kita dapat melihat daftar
lengkapnya dengan menggunakan potongan kode program berikut ini:
4.2 Percobaan
Percobaan 1
#menampilkan lingkaran ketika ada inputan double klik kiri dari mouse
import cv2
import numpy as np
# mouse callback function
def draw_circle(event,x,y,flags,param):
if event == cv2.EVENT_LBUTTONDBLCLK:
#menggambar lingkaran ketika double klik kiri
cv2.circle(img,(x,y),100,(255,0,0),-1)
#membuat gambar hitam, dan menggunakan fungsi ke window
img = np.zeros((512,512,3), np.uint8)
cv2.namedWindow('image')
cv2.setMouseCallback('image',draw_circle)
while(1):
cv2.imshow('image',img)
if cv2.waitKey(20) & 0xFF == ord('q'):
break
cv2.destroyAllWindows()
17
MODUL PRAKTIKUM PENGOLAHAN CITRA OPENCV 2017/2018
Tulis hasilnya disini dan jelaskan isi program
4.3 Soal Latihan
1. Buatkan sebuah program yang dapat membuat lingkaran dan kotak menggunakan
inputan double klik kiri mouse. Jika tombol m kecil ditekan, maka saat double klik, akan
muncul lingkaran. Jika tombol m kecil ditekan kembali, maka saat double klik, akan
muncul kotak. Jika tombol m kecil ditekan kembali, maka saat double klik, akan muncul
lingkaran. Begitu seterusnnya.
Tulis kode program disini
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cv2.destroyAllWindows()
18
MODUL PRAKTIKUM PENGOLAHAN CITRA OPENCV 2017/2018
Pertemuan 5
Trackbar as the Color Palette
Tujuan Intruksional :
Bertujuan untuk menggunakan trackbar sebagai inputan pada OpenCV
Kompetensi Yang Diharapkan : Mahasiswa diharapkan dapat memahami konsep penggunan trackbar OpenCV.
Waktu Pertemuan : 100 Menit
5.1 Dasar Teori
Ada cara lain untuk mengubah nilai integer pada variable. Yaitu dengan menggunakan
trackbar. Untuk menggunakan trackbar, pertama kita harus membuat trackbar terlebih dahulu,
lalu yang kedua kita melakukan pembacaan terhadap posisi trackbar.
Mirip seperti mouse event, trackbar juga akan menjalankan kode fungsi program. Jika
kita tidak ingin menjalankan fungsi apapun, kita dapat membuat fungsi kosong, yang hanya
untuk sebagai syarat agar inputan trackbar dapat berjalan.
cv2.createTrackbar('R','image',0,255,nothing)
- „R‟ adalah nama dari trackbar yang akan dibuat.
- „image‟ adalah nama window dimana trackbar tersebut berada.
- 0 adalah nilai default dari trackbar
- 255 adalah nilai maksimun dari trackbar.
*Perlu diketahui, bahwa nilai minimum dari setiap trackbar adalah 0, dan nilai dari
trackbar sendiri adalah nilai integer/nilai bilangan bulat
- Nothing adalah nama fungsi yang akan dijalankan ketika trackbar diubah
r = cv2.getTrackbarPos('R','image')
- r adalah nama variabel untuk menampung inputan dari trackbar yang dibuat.
- „R‟ adalah nama dari trackbar yang akan diambil nilainya.
- „image‟ adalah nama window dimana trackbar tersebut berada.
19
MODUL PRAKTIKUM PENGOLAHAN CITRA OPENCV 2017/2018
5.2 Percobaan
Percobaan 1
Tulis hasilnya disini dan jelaskan isi program
import cv2
import numpy as np
def nothing(x):
pass
# Create a black image, a window
img = np.zeros((300,512,3), np.uint8)
cv2.namedWindow('image')
# create trackbars for color change
cv2.createTrackbar('R','image',0,255,nothing)
cv2.createTrackbar('G','image',0,255,nothing)
cv2.createTrackbar('B','image',0,255,nothing)
# create switch for ON/OFF functionality
switch = '0 : OFF \n1 : ON'
cv2.createTrackbar(switch, 'image',0,1,nothing)
while(1):
cv2.imshow('image',img)
k = cv2.waitKey(1) & 0xFF
if k == ord('q'):
break
#get current positions of four trackbars
r = cv2.getTrackbarPos('R','image')
g = cv2.getTrackbarPos('G','image')
b = cv2.getTrackbarPos('B','image')
s = cv2.getTrackbarPos(switch,'image')
if s == 0:
img[:] = 0
else:
img[:] = [b,g,r]
cv2.destroyAllWindows()
20
MODUL PRAKTIKUM PENGOLAHAN CITRA OPENCV 2017/2018
Pertemuan 6
Image Blending
Tujuan Intruksional :
Tujuan dari materi ini adalah meleburkan gambar pertama ke gambar kedua
Kompetensi Yang Diharapkan : Mahasiswa diharapkan dapat memahami konsep Image Blending pada OpenCV.
Waktu Pertemuan : 100 Menit
6.1 Dasar Teori
Image Blending adalah penambahan gambar yang satu dengan gambar yang lain.
Mudahnya adalah gambar pertama di tumpang tindih dengan gambar kedua. Bobot dari kedua
gambar akan diatur sehingga hasil dari tumpang tindih gambar akan terlihat transparan satu
sama lain. Namun Image Blending ini hanya berlaku untuk dua gambar berdimensi sama
(misal: gambar A = 400x300 px & gambar B = 400x300 px). Untuk penulisan fungsi adalah
sebagai berikut:
dst = cv2.addWeighted(img1,0.7,img2,0.3,0)
- Img1 adalah gambar pertama
- 0,7 adalah bobot dari gambar pertama
- Img2 adalah gambar kedua
- 0,3 adalah bobot dari gambar kedua
- 0 adalah nilai dari gamma
6.2 Percobaan
Percobaan 1
import numpy as np
import cv2
img1 = cv2.imread('messi.png')
img2 = cv2.imread('opencv_logo.jpg')
dst = cv2.addWeighted(img1,0.7,img2,0.3,0)
cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
21
MODUL PRAKTIKUM PENGOLAHAN CITRA OPENCV 2017/2018
Tulis hasilnya disini dan jelaskan isi program
22
MODUL PRAKTIKUM PENGOLAHAN CITRA OPENCV 2017/2018
-Ambil frame dari video atau gambar.
-ubah dari format BGR ke HSV
-tentukan ambang batas atas & bawah warna yang akan dipilih
-lalu ekstrak warna tersebut, dan kita dapat melakukan apapun
terhadapnya
Pertemuan 7
Object Tracking
Tujuan Intruksional :
Bertujuan untuk menyeleksi warna pada sebuah citra.
Kompetensi Yang Diharapkan : Mahasiswa diharapkan dapat memahami konsep segmentasi warna.
Waktu Pertemuan : 100 Menit
7.1 Dasar Teori
Dalam pengolahan citra, terkadang kita perlu untuk memisahkan suatu warna, dari warna
lainnya. dalam pemisahan warna, metode terbaik untuk penyeleksian adalah menggunakan
mode channel HSV. Hal ini dikarenakan pada HSV, warna asli hanya berada pada channel
Hue, sedangkan channel Saturation berfungsi untuk menentukan seberapa kental warna
tersebut. Dan channel Value berfungsi untuk mengatur kecerahan warna. Untuk algoritma dari
tracking objek menggunakan segmentasi warna adalah sebagai berikut:
Untuk nilai Hue, batasnya adalah 0-179. Saturation 0-255, dan Value adalah 0-255
7.2 Percobaan
Percobaan 1
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
while(1):
# Take each frame
_, frame = cap.read()
# Convert BGR to HSV
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
# define range of blue color in HSV
# ambang batas bawah nilai H, S, dan V
lower_blue = np.array([110,50,50])
# ambang batas atas nilai H, S, dan V
mask = cv2.inRange(hsv, lower_blue, upper_blue)
# Bitwise-AND mask and original image
res = cv2.bitwise_and(frame,frame, mask= mask)
cv2.imshow('frame',frame)
cv2.imshow('mask',mask)
23
MODUL PRAKTIKUM PENGOLAHAN CITRA OPENCV 2017/2018
Tulis hasilnya disini dan jelaskan isi program
upper_blue = np.array([130,255,255])
# Threshold the HSV image to get only blue colors
mask = cv2.inRange(hsv, lower_blue, upper_blue)
# Bitwise-AND mask and original image
res = cv2.bitwise_and(frame,frame, mask= mask)
# Bitwise-AND mask and original image
res = cv2.bitwise_and(frame,frame, mask= mask)
cv2.imshow('frame',frame)
cv2.imshow('mask',mask)
cv2.imshow('res',res)
k = cv2.waitKey(5) & 0xFF
if k == 27:
break
cap.release()
cv2.destroyAllWindows()
24
MODUL PRAKTIKUM PENGOLAHAN CITRA OPENCV 2017/2018
Pertemuan 8
Morphological Transformations
Tujuan Intruksional :
Bertujuan untuk memperbaiki citra.
Kompetensi Yang Diharapkan : Mahasiswa diharapkan dapat memahami konsep perbaikan citra.
Waktu Pertemuan : 100 Menit
8.1 Dasar Teori
Terkadang dalam pengolahan citra, hasil dari seleksi objek tidak sempurna, seperti
terdapat noise, keropos, terkikis, dan lain sebagainya. Hal ini dapat diatasi dengan bantuan
Morphological Transformations. Metode ini dapat berguna untuk membersihkan noise,
menutup celah dari objek yang terseleksi, dan sebagainya. Metode ini dapat digunakan
dengan syarat, image yang akan diolah adalah image 2 bit, yaitu hanya terdiri dari hitam pekat
dan putih polos. Beberapa fungsi yang biasa digunakan adalah:
1. Erosion: Yaitu untuk mengikis objek sehingga menjadi lebih kecil (kurus).
2. Dilation: Yaitu untuk mempertebal objek sehingga menjadi lebih besar (gemuk).
3. Opening: yaitu untuk menghilangkan noise yang ada disekitar gambar. Opening
merupakan operasi Erosion yang diikuti dengan Dilation.
4. Closing: yaitu untuk menutupi celah yang ada di dalam objek. Closing merupakan
operasi Dilation yang diikuti dengan Erosion
8.2 Percobaan
Percobaan 1
import cv2
import numpy as np
img = cv2.imread('satu.png',0)
ret,th1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
kernel = np.ones((5,5),np.uint8)
erosion = cv2.erode(th1,kernel,iterations = 1)
cv2.imshow('erosion',erosion)
dilation = cv2.dilate(th1,kernel,iterations = 1)
cv2.imshow('dilation',dilation)
opening = cv2.morphologyEx(th1, cv2.MORPH_OPEN, kernel)
cv2.imshow('opening',opening)
closing = cv2.morphologyEx(th1, cv2.MORPH_CLOSE, kernel)
cv2.imshow('closing',closing)
cv2.waitKey(0) & 0xFF
cv2.destroyAllWindows()
25
MODUL PRAKTIKUM PENGOLAHAN CITRA OPENCV 2017/2018
Tulis hasilnya disini dan jelaskan isi program
cv2.waitKey(0) & 0xFF
cv2.destroyAllWindows()
26
MODUL PRAKTIKUM PENGOLAHAN CITRA OPENCV 2017/2018
Pertemuan 9
Menandai objek
Tujuan Intruksional :
Bertujuan untuk menandai objek yang ditracking menggunakan fungsi drawing.
Kompetensi Yang Diharapkan : Mahasiswa diharapkan dapat memahami konsep kontur openCV.
Waktu Pertemuan : 100 Menit
9.1 Dasar Teori
Untuk melihat objek yang sedang di tracking, akan menjadi sulit jika tidak adanya
penanda objek tersebut. Oleh sebab itu, biasanya suatu objek yang sedang di tracking akan
diberi tanda lingkaran, kotak, atau tanda lainnya. Untuk dapat menandai objek yang sedang di
tracking, langkah pertama adalah mencari garis kontur dari objek yang dituju. Setelah itu,
tandai objek tersebut berdasarkan referensi garis konturnya menggunakan fungsi drawing
(pemberian kotak misalnya). Untuk mencari garis kontur, fungsi yang harus kita gunakan
yaitu:
res,cntr,hier=cv2.findContours(img,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
- res adalah hasil/result image dari operasi findContours(). Variable ini hanya ada pada
openCV versi terbaru. Untuk versi yang lebih lama, variable ini tidak dibutuhkan
- cntr adalah variable yang menampung semua garis kontur yang didapatkan dari
operasi findContours(). Variable ini yang nantinya diperlukan untuk menandai objek
tersebut.
- Hier adalah variable penampung hirarki dari masing masing garis kontur, apakah garis
tersebut berada didalam garis kontur yang lain, ataukah berada diluar garis kontur
yang lain.
- Img adalah citra biner yang akan diproses untuk dicari garis konturnya.
- cv2.RETR_TREE adalah tipe hirarki yang akan dibuat dari masing-masing kontur.
Sebenarnya ada banyak tipe hirarki dalam openCV. Beberapa diantaranya adalah
cv2.RETR_LIST, cv2.RETR_CCOMP, cv2.RETR_EXTERNAL, dan lain
sebagainya. Namun tipe hirarki terbaik (menurut kami/asdos) adalah
cv2.RETR_TREE. Karena tipe ini dapat menjelaskan secara lengkap kontur yang
mana yang merupakan kontur paling luar, kontur paling dalam, kontur kakak, kontur
adik, kontur tetangga, dan sebagainya
- cv2.CHAIN_APPROX_SIMPLE adalah tipe penyimpanan kontur. Ada satu lagi dari
tipe penyimpanan ini, yaitu tipe cv2.CHAIN_APPROX_NONE. Perbedaan dari
keduanya adalah jika misalkan objek yang kita tracking berbentuk persegi/persegi
27
MODUL PRAKTIKUM PENGOLAHAN CITRA OPENCV 2017/2018
panjang sempurna. Maka cv2.CHAIN_APPROX_SIMPLE hanya akan menyimpan
keempat titik sudut dari persegi tersebut. Sedangkan cv2.CHAIN_APPROX_NONE
akan menyimpan seluruh titik piksel dari sisi persegi tersebut. Jadi, berapa banyak
memory komputer yang akan dihemat dengan menggunakan tipe
cv2.CHAIN_APPROX_SIMPLE. Dan berapa borosnya memory komputer jika
persegi tersebut semakin besar sedangkan kita menggunakan tipe
cv2.CHAIN_APPROX_NONE?
Langkah berikutnya setelah kita mendapatkan garis-garis konturnya adalah menandai
objek tersebut berdasarkan garis konturnya. Ada banyak cara untuk menandai garis kontur
tersebut. Beberapa diantaranya adalah persegi pembatas (Bounding Rectangle), baik persegi
yang tegak, maupun persegi berotasi, lingkaran pembatas, Ellipse pembatas, garis, dan lain
sebagainya. Namun untuk praktikum ini, kita hanya membahas cara menggunakan persegi
pembatas, khususnya persegi tegak.
Untuk langkahnya sendiri adalah dengan memproses fungsi boundingRect() per tiap-tiap
garis kontur. Hasil output dari fungsi cv2. boundingRect() adalah titik koordinat “kiri atas”
(x,y) dan nilai lebar serta tinggi objek. Nilai-nilai ini dapat kita gunakan untuk menggambar
kotak menggunakan fungsi cv2.rectangle().
9.2 Percobaan
Percobaan 1
import cv2
import numpy as np
img = cv2.imread('satu.png',0)
ret,th1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
res,cntr,hier=cv2.findContours(th1,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPL
E)
for cnt in cntr:
x,y,w,h = cv2.boundingRect(cnt)
cv2.rectangle(img,(x,y),(x+w,y+h),(0,0, 255),2)
cv2.imshow('img',img)
cv2.waitKey(0) & 0xFF
cv2.destroyAllWindows()
x,y,w,h = cv2.boundingRect(cnt)
28
MODUL PRAKTIKUM PENGOLAHAN CITRA OPENCV 2017/2018
Tulis hasilnya disini dan jelaskan isi program