LAPORAN PRAKTIKUM
PENGOLAHAN CITRA MENGGUNAKAN PYTHON
Dosen Pengampu : Dedi Irawan, S.Kom., M.T.I.
Oleh :
Nanda Nour Janah NPM 21430077
PROGRAM STUDI S1 ILMU KOMPUTER FAKULTAS ILMU KOMPUTER
UNIVERSITAS MUHAMMADIYAH METRO
2023
KATA PENGANTAR
Dalam rangka menyelesaikan tugas mata kuliah Pengolahan Citra, dengan ini saya menyampaikan Laporan Praktikum Pengolahan Citra Menggunakan Python.
Laporan ini dibuat untuk memenuhi tugas mata kuliah Pengolahan Citra.
Laporan praktikum ini berisi program-program sederhana yang mampu melakukan pengolahan citra seperti menampilkan gambar, histogram, masking, threshold dan rescale resize menggunakan library OpenCV dan Matplotlib.
Program – program sederhana yang saya buat diharapkan dapat memberikan manfaat serta pemahaman baru bagi kami mengenai pengolahan citra digital dan implementasinya menggunakan Bahasa pemrograman Python. Saya menyadari bahwa program – program ini masih jauh dari kata sempurna, oleh karena itu kritik dan saran yang membangun sangat saya harapkan.
Akhir kata, saya ucapakan terima kasih kepada Dosen Pengampu Bapak Dedi Irawan, S.Kom., M.T.I dan pihak – pihak yang telah membantu dalam penyelesaian tugas mata kuliah ini.
Metro, 09 Mei 2023
Penulis
A. Install Python 3.11
1. Buat folder pada drive C: dan beri nama “Python 3.11”
2. Download file instalasi pada website Python Python Release Python 3.11.2 | Python.org
3. Install Python, pilih Customize installation
4. Pilih Next
5. Pilih Browse
6. Pilih folder yang sudah dibuat tadi, lalu klik Ok
7. Klik Install
8. Buka Command Prompt dengan menekan tombol Windows + R pada keyboard dan ketikkan “cmd”, lalu klik Ok
9. Lakukan upgrade pip dan install matplotlib
a) C:\ Python311> python.exe -m pip install --upgrade pip
b) C:\ Python311>python.exe -m pip install opencv-python
c) C:\ Python311>python.exe -m pip install matplotlib
B. Menampilkan gambar
1. Buat folder pada drive D: dengan nama Python 21430077, folder ini untuk menyimpan file coding dan media yang akan ditampilkan nantinya
2. Buka aplikasi IDLE (Python 3.11)
3. Buat file baru dengan membuka menu file atau dengan menekan Ctrl+N
4. Selanjutnya ketikkan coding di bawah ini, untuk nama file pada code harus sama dengan nama file yang akan ditampilkan
import cv2
gambar = cv2.imread('rosella.jpg')
cv2.imshow('Gambar burung Crimson Rosella',gambar) cv2.waitKey()
5. Kemudian klik pada menu Run lalu klik Run Modul
6. Hasil output seperti di bawah
Kode di atas merupakan kode python yang menggunakan library OpenCV untuk membaca dan menampilkan gambar. Pertama, kode mengimport modul “cv2”
dari library OpenCV. Selanjutnya, gambar “rosella.jpg” dimuat ke dalam variable “gambar” menggunakan fungsi “cv2.imread()”. Kemudian, gambar tersebut ditampilkan di layar menggunakan fungsi “cv2.imshow()”. Setelah itu, kode menunggu input dari pengguna menggunakan fungsi “cv2.waitKey()”. Jadi, Ketika kode dieksekusi, gambar “rosella.jpg” akan ditampilkan di layar dalam jendela dengan judul “Gambar Burung Crimson Rosella”.
C. Membagi gambar menjadi 4 bagian
1. Siapkan gambar pada folder Python 21430077.
2. Buka IDLE (Python 3.11)
3. Lalu ketikkan coding seperti di bawah import cv2
image = cv2.imread('duck.jpg') (h, w) = image.shape[:2]
(b, g, r) = image [0, 0]
print ("Pixel pada (0, 0) - red : {}, green : {}, blue : {}". format(r,g,b)) image[0,0] = (255, 0, 0)
(b, g, r) = image[0, 0]
print ("Pixel pada (0, 0) - red : {}, green : {}, blue : {}". format(r,g,b)) (cX, cY) = (w//2, h//2)
kiri_atas = image [0:cY, 0:cX]
kanan_atas = image [0:cY, cX:w]
kanan_bawah = image [cY:h, cX:w]
kiri_bawah = image [cY:h, 0:cX]
cv2.imshow('Kiri Atas', kiri_atas) cv2.imshow('Kanan Atas', kanan_atas) cv2.imshow('Kanan Bawah', kanan_bawah) cv2.imshow('Kiri Bawah', kiri_bawah) cv2.waitKey(0)
4. Lalu Run Modul, dan hasil output seperti di bawah ini
Kode di atas menggunakan library OpenCV untuk memanipulasi gambar.
Pertama-tama, kode membaca gambar “duck.jpg” menggunakan fungsi
“cv2.imread()” dan menyimpannya ke dalam variable “image”.
Kemudian, kode mengambil dimensi gambar (tinggi dan lebar) menggunakan method”.shape” dan menyimpannya ke dalam variable “h” dan “w”.
Selanjutnya, kode mengambil nilai piksel (red, green, dan blue) pada koordinat (0,0) menggunakan notasi slicing pada array “image”. Kemudian, nilai piksel tersebut dicetak menggunakan fungsi “print()”. Selanjutnya, nilai piksel tersebut diubah menjadi (255,0,0) dan dicetak Kembali untuk memastikan perubahan nilai. Kemudian, kode membagi gambar menjadi 4 bagian yang sama besar menggunakan notasi slicing. Setelah itu, keempat bagian tersebut ditampilkan di jendela yang berbeda menggunakan fungsi
“cv2.imshow()”. Kode menunggu input dari pengguna menggunakan fungsi
“cv2.waitKey(0)” daan menutup jendela saat pengguna menekan tombol pada keyboard.
D. Membagi gambar menjadi 2 bagian (atas dan bawah) 1. Siapkan gambar yang akan ditampilkan
2. Buka IDLE (Python 3.11)
3. Ketikkan code sperti di bawah ini import cv2
image = cv2.imread('duck.jpg') (h, w) = image.shape[:2]
(b, g, r) = image [0, 0]
print ("Pixel pada (0, 0) - red : {}, green : {}, blue : {}". format(r,g,b)) image[0,0] = (255, 0, 0)
(b, g, r) = image[0, 0]
print ("Pixel pada (0, 0) - red : {}, green : {}, blue : {}". format(r,g,b)) (cX, cY) = (w//2, h//2)
atas = image [0:cY, 0:]
bawah = image [cY:h, 0:]
cv2.imshow('Atas', atas) cv2.imshow('Bawah', bawah) cv2.waitKey(0)
4. Lalu Run Modul, dan hasil output akan seperti ini
Kode tersebut membaca gambar “duck.jpg” menggunakan fungsi
“cv2.imread()”. Kemudian, kode menghitung titik tengah gambar (cX, cY) dan membagi gambar menjadi dua bagian, yaitu bagian atas (0:cY, 0:w) dan bagian bawah (cY:h, 0:w) menggunakan notasi slicing. Terakhir, kode menampilkan keda gambar tersebut di jendela yang berbeda menggunakan fungsi “cv2.imshow()”, menunggu input daari pengguna menggunakan fungsi “cv2.waitKey(0)”, daan menutup jendela saat penggguna menekan tombol pada keyboard.
E. Membagi gambar menjadi 2 bagian (kanan dan kiri) 1. Siapkan gambar yang akan ditampilkan
2. Buka IDLE (Python 3.11)
3. Ketikkan code seperti di bawah ini import cv2
image = cv2.imread('duck.jpg') (h, w) = image.shape[:2]
(b, g, r) = image [0, 0]
print ("Pixel pada (0, 0) - red : {}, green : {}, blue : {}". format(r,g,b)) image[0,0] = (255, 0, 0)
(b, g, r) = image[0, 0]
print ("Pixel pada (0, 0) - red : {}, green : {}, blue : {}". format(r,g,b)) (cX, cY) = (w//2, h//2)
kiri = image [0:, 0:cX]
kanan = image [0:, cX:w]
cv2.imshow('Kiri', kiri) cv2.imshow('Kanan', kanan) cv2.waitKey(0)
4. Run Modul dan hasilnya akan seperti ini
Kode tersebut membaca gambar “duck.jpg” menggunakan OpenCV dan membagi gambar menjadi dua bagian, kode menghitung titik tengah gambar (cX, cY) dan membagi gambar menjadi dua bagian, yaitu bagian kiri (0:, 0:cX) dan bagian kanan (0:, cX:w) menggunakan notasi slicing dan menyimpannya ke dalam variable “kiri” dan “kanan”. Terakhir, kode menampilkan kedua bagian gambar tersebut di jendela yang berbeda menggunakan fungsi “cv2.imshow()”.
F. Membagi gambar menjadi 6 bagian 1. Siapkan gambar
2. Buka IDLE (Python 3.11)
3. Ketikkan coding seperti di bawah ini import cv2
image = cv2.imread('duck.jpg') (h, w) = image.shape[:2]
(b, g, r) = image [0, 0]
print ("Pixel pada (0, 0) - red : {}, green : {}, blue : {}". format(r,g,b)) image[0,0] = (255, 0, 0)
(b, g, r) = image[0, 0]
print ("Pixel pada (0, 0) - red : {}, green : {}, blue : {}". format(r,g,b)) (cX, cY) = (w//2, h//2)
kiri_atas = image [0:cY, 0:cX-w//6]
atas = image [0:cY, cX-w//6:cX+w//6]
kanan_atas = image [0:cY, cX+w//6:w]
kiri_bawah = image [cY:h, 0:cX-w//6]
bawah = image [cY:h, cX-w//6:cX+w//6]
kanan_bawah = image [cY:h, cX+w//6:w]
cv2.imshow('Kiri Atas', kiri_atas) cv2.imshow('atas', atas)
cv2.imshow('Kanan Atas', kanan_atas) cv2.imshow('Kiri Bawah', kiri_bawah) cv2.imshow('bawah', bawah)
cv2.imshow('Kanan Bawah', kanan_bawah) cv2.waitKey(0)
4. Run Modul dan hasilnya seperti ini
Kode di atas membaca sebuah gambar “duck.jpg”, lalu menampilkan nilai RGB dari piksel pada posisi (0,0), mengubah nilai pixel tersebut menjadi (255,0,0) dan menampilkan Kembali nilai RGB-nya.
Selanjutnya, program tersebut membagi gambar menjadi enam bagian yaitu, kiri_atas, atas, kanan_atas, kiri_bawah, bawah dan kanan_bawah, dan menampilkan setiap bagian tersebut pada jendela gambar terpisah dengan menggunakan funsi “cv2.imshow()”
G. Menampilkan histogram gambar 1. Siapkan gambarnya
2. Buka IDLE (Python 3.11) 3. Ketikkan kode di bawah ini
import cv2
import numpy as np
from matplotlib import pyplot as plt gambar = cv2.imread('lavender.jpg') cv2.imshow('lavender', gambar) color = ('b', 'g', 'r')
for i, col in enumerate (color):
histr = cv2.calcHist([gambar],[i],None,[256],[0,256]) plt.plot(histr,color = col)
plt.xlim([0,256]) plt.show()
4. Run Modul dan hasilnya seperti di bawah ini
Kode tersebut menggunakan library OpenCV dan Matplotlib. Gambar dibaca dengan menggunakan perintah “cv2.imread(‘lavender.jpg’)” dan ditampilkan pada layar dengan menggunakan fungsi “cv2.imshow()”. Selanjutnya variable “color” didefinisikan sebagai tuple yang berisi tiga karakter yaitu
“b”, “g” dan “r” yang merepresentasikan masing-masing channel warna pada gambar yaitu biru, hijau daan merah. Melalui perulangan “for”, setiap channel warna tersebut dihitung histogramnya dengan menggunakan
“cv2.calcHist([gambar],[i],None,[256],[0,256])”, dimana ‘i’
merepresentasikan indeks channel warna pada tuple “color”. Histogram tersebut kemudian direpresentasikan daalam bentuk plot dengan menggunakan “plt.plot(histr,color = col)” dan “plt.show()”. Dalam plot tersebut, sumbu x merepresentasikan nilai piksel (0-255) dan sumbu y merepresentasikan frekuensi kemunculan nilai piksel tersebut.
H. Masking lingkaran pada gambar
1. Siapkan gambar pada folder Python 21430077 2. Buka IDLE (Python 3.11)
3. Ketikkan kode seperti di bawah ini import cv2 as cv
import numpy as np
#membuka/load gambar dari komputer gambar = cv.imread('owl.jpg')
#menampilkan gambar
cv.imshow('gambar asli', gambar)
blank = np.zeros(gambar.shape[:2], dtype='uint8') cv.imshow('Blank Image', blank)
#mask dengan bentuk setengah lingkaran
mask = cv.circle(blank, (gambar.shape[1]//2 + 45, gambar.shape[0]//2), 100, 255, -1)
cv.imshow('Mask', mask)
masked = cv.bitwise_and(gambar, gambar, mask=mask) cv.imshow('Masked Image', masked)
cv.waitKey(0)
4. Hasilnya akan seperti di bawah ini
Kode di atas adalah contoh penggunaan masking pada gambar menggunakan library OpenCV di Python. Pertama, gambar di muat menggunakan fungssi
“cv.imread()”. Kemudian, di buat gambar kosong (blank image) menggunakan “np.zeros()” dengan ukuran yang sama dengan ukuran gambar asli. Gambar kosong tersebut nantinya akan digunakan sebagai basis untuk membuat mask. Mask dibuat menggunakan fungsi “cv.circle()”, di mana titik pusat dan radius lingkaran yang dibuat ditentukan. Nilai piksel di dalam lingkaran diberi nilai 255(putih) sedangkan piksel di luar lingkaran diberi nilai 0 (hitam). Hasil mask tersebut ditampilkan menggunakan
“cv.imshow()”. Terakhir, gambar asli di-masking menggunakan bitwise AND (cv.bitwise_and()) dengan mask yang telah dibuat sebelumnya. Hasil gambar yang telah di-asking ditampilkan menggunakan “cv.imshow()”. Sehingga hasil yang ditampilkan adalah gambar asli dengan lingkaran setengah yang ditampilkan saja dan bagian lainnya menjadi hitam
I. Masking setengah lingkaran pada gambar
1. Siapkan gambar yang akan di tampilkan di folder Python 21430077 2. Buka IDLE (Python 3.11)
3. Ketikkan coding seperti di bawah ini import cv2 as cv
import numpy as np
#membuka/lord gambar dari komputer gambar = cv.imread ('deer.jpg')
#menampilkan gambar
cv.imshow('gambar asli',gambar)
blank = np.zeros(gambar.shape[:2], dtype='uint8')
cv.imshow('blank image', blank)
#mask dengan bentuk setengah lingkaran
circle = cv.circle(blank.copy(),(gambar.shape [1]//2 + 30,gambar.shape[0]//2), 100, 255,-1)
rectangle = cv.rectangle (blank.copy(),(30,30),(370,370),255, -1) weird_shape =cv.bitwise_and(circle, rectangle)
cv.imshow('weird shape', weird_shape)
masked = cv.bitwise_and(gambar, gambar, mask=weird_shape) cv.imshow('masked image', masked)
cv.waitKey(0)
4. Run Modul, dan hasilnya akan seperti ini
Pada kode di atas gambar “deer.jpg” dimuat dengan menggunakan OpenCV dan menampilkan gambar tersebut. Kemudian, dibuat blank image dengan ukuran yang sama dengan gambar asli menggunakan NumPy. Kemudian membuat dua bentuk mask setengah lingkaran dan persegi Panjang dengan menggunakan “cv.circle()” dan “cv.rectangle()”. Lalu kedua mask digabungkan menggunakan “bitwise_and()” yang akan menghasilkan bentuk setengah lingkaran.
J. Thresholding pada gambar
1. Siapkan gambar yang akan di buat threshold pada folder Python 21430077 2. Buka IDLE (Python 3.11), dan tuliskan code di bawah ini
import cv2 as cv
#membuka/load gambar dari komputer gambar = cv.imread('starfish.jpg')
#menampilkan gambar gray
gray = cv.cvtColor(gambar, cv.COLOR_BGR2GRAY) cv.imshow('Gambar Gray', gray)
# Simple Thresholding
threshold, thresh = cv.threshold(gray, 150, 255, cv.THRESH_BINARY ) cv.imshow('Simple Thresholded', thresh)
threshold, thresh_inv = cv.threshold(gray, 150, 255, cv.THRESH_BINARY_INV )
cv.imshow('Simple Thresholded Inverse', thresh_inv)
# Adaptive Thresholding
adaptive_thresh = cv.adaptiveThreshold(gray, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY_INV, 11, 9)
cv.imshow('Adaptive Thresholding', adaptive_thresh) cv.waitKey(0)
3. Run Modul, dan hasilnya seperti ini
Code di atas adalah implementasi dari beberapa Teknik thresholding pada cutra grayscale menggunakan OpenCV. Pertama, gambar dimuat dan diubah ke citra grayscale. Kemudian, dilakukan thresholding dengan metode Simple
Thresholding menggunakan nilai threshold 150. Selain itu, dilakukan juga thresholding dengan metode Adaptive Thresholding menggunakan Teknik Gaussian dengan ukuran block 11 dan konstanta C 9. Hasil dari tiap thresholding ditampilkan pada layar dengan menggunakan “cv.imshow()”.
K. Rescale dan Resize pada video
1. Siapkan video yang akan digunakan ke folder Python 21430077 2. Buka IDLE (Python 3.11) dan ketikkan coding di bawah ini
import cv2 as cv
def rescaleFrame(frame, scale=1.00):
# Images, Videos and Live Video width = int(frame.shape[1] * scale) height = int(frame.shape[0] * scale) dimensions = (width,height)
return cv.resize(frame, dimensions, interpolation=cv.INTER_AREA) def changeRes(width,height):
# Live video capture.set(3,width) capture.set(4,height)
# Reading Videos
capture = cv.VideoCapture('jpnlndscp.mp4') while True:
isTrue, frame = capture.read()
frame_resized = rescaleFrame(frame, scale=.2)
cv.imshow('Video', frame)
cv.imshow('Video Resized', frame_resized) if cv.waitKey(20) & 0xFF==ord('d'):
break capture.release()
cv.destroyAllWindows()
3. Run Modul, dan hasilnya akan seperti di bawah ini
kode di atas digunakan untuk membaca video dan menampilkannya dalam dua ukuran yang berbeda di jendela tampilan. Pertama, video ditampilkan dalam ukuran asli pada jendela “Video” dan kedua, video ditampilkan dalam ukuran yang telah diperkecil sebesar 20% dari ukuran asli pada jendela
“Video Resized”. Code tersebut menggunakan dua fungsi yaitu
“rescaleFrame” untuk mengubah ukuran frame video dan “changeRes”
untuk mengubah resolusi video. Selain itu, pada saat menjalankan program, pengguna dapat menghentikan tampilan video dengan menekan tombol “d”
pada keyboard.