ii - unila

28

Upload: others

Post on 05-Oct-2021

13 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ii - Unila
Page 2: ii - Unila

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.

Page 3: ii - Unila

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

Page 4: ii - Unila

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

Page 5: ii - Unila

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)*

Page 6: ii - Unila

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…”)

Page 7: ii - Unila

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

Page 8: ii - Unila

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.

Page 9: ii - Unila

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()

Page 10: ii - Unila

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()

Page 11: ii - Unila

11

MODUL PRAKTIKUM PENGOLAHAN CITRA OPENCV 2017/2018

Tulis hasilnya disini dan jelaskan isi program

Page 12: ii - Unila

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)

Page 13: ii - Unila

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))

Page 14: ii - Unila

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()

Page 15: ii - Unila

15

MODUL PRAKTIKUM PENGOLAHAN CITRA OPENCV 2017/2018

Tulis hasilnya disini dan jelaskan isi program

Page 16: ii - Unila

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()

Page 17: ii - Unila

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()

Page 18: ii - Unila

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.

Page 19: ii - Unila

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()

Page 20: ii - Unila

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()

Page 21: ii - Unila

21

MODUL PRAKTIKUM PENGOLAHAN CITRA OPENCV 2017/2018

Tulis hasilnya disini dan jelaskan isi program

Page 22: ii - Unila

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)

Page 23: ii - Unila

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()

Page 24: ii - Unila

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()

Page 25: ii - Unila

25

MODUL PRAKTIKUM PENGOLAHAN CITRA OPENCV 2017/2018

Tulis hasilnya disini dan jelaskan isi program

cv2.waitKey(0) & 0xFF

cv2.destroyAllWindows()

Page 26: ii - Unila

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

Page 27: ii - Unila

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)

Page 28: ii - Unila

28

MODUL PRAKTIKUM PENGOLAHAN CITRA OPENCV 2017/2018

Tulis hasilnya disini dan jelaskan isi program