Hapus Latar Belakang Foto Menggunakan Python 3 dan OpenCv 3.2
Ini adalah artikel pertama saya. Disini kita akan melihat bagaimana cara menghapus latar belakang pada foto hanya menggunakan OpenCV dan python. Dalam hal ini, saya akan mengidentifikasi warna melalui HSV, dan untuk lebih jelasnya nanti saya akan membuat artikel lain tentang Mendeteksi warna (Hsv Color Space) – tetap menggunakan Opencv dan Python. Versi yang digunakan dalam project ini adalah : OpenCV 3.4 dan python 3.
Bagaimana cara menghapus latar belakang?
Dengan prosedur atau cara ini ada baiknya foto yang akan dibuang latar belakangnya memiliki latar belakang dengan warna yang polos, itu akan lebih mudah. Langkah pertama adalah membuat jendela dengan trackbar untuk dengan mudah memilih warna mana yang akan dihapus.
Berikut adalah source codenya :
import cv2 import numpy as np cap = cv2.VideoCapture(0) panel = np.zeros([100, 700], np.uint8) cv2.namedWindow('panel') def nothing(x): pass cv2.createTrackbar('L – h', 'panel', 0, 179, nothing) cv2.createTrackbar('U – h', 'panel', 179, 179, nothing) cv2.createTrackbar('L – s', 'panel', 0, 255, nothing) cv2.createTrackbar('U – s', 'panel', 255, 255, nothing) cv2.createTrackbar('L – v', 'panel', 0, 255, nothing) cv2.createTrackbar('U – v', 'panel', 255, 255, nothing) cv2.createTrackbar('S ROWS', 'panel', 0, 480, nothing) cv2.createTrackbar('E ROWS', 'panel', 480, 480, nothing) cv2.createTrackbar('S COL', 'panel', 0, 640, nothing) cv2.createTrackbar('E COL', 'panel', 640, 640, nothing) while True: _, frame = cap.read() s_r = cv2.getTrackbarPos('S ROWS', 'panel') e_r = cv2.getTrackbarPos('E ROWS', 'panel') s_c = cv2.getTrackbarPos('S COL', 'panel') e_c = cv2.getTrackbarPos('E COL', 'panel') roi = frame[s_r: e_r, s_c: e_c] hsv = cv2.cvtColor(roi, cv2.COLOR_BGR2HSV) l_h = cv2.getTrackbarPos('L – h', 'panel') u_h = cv2.getTrackbarPos('U – h', 'panel') l_s = cv2.getTrackbarPos('L – s', 'panel') u_s = cv2.getTrackbarPos('U – s', 'panel') l_v = cv2.getTrackbarPos('L – v', 'panel') u_v = cv2.getTrackbarPos('U – v', 'panel') lower_green = np.array([l_h, l_s, l_v]) upper_green = np.array([u_h, u_s, u_v]) mask = cv2.inRange(hsv, lower_green, upper_green) mask_inv = cv2.bitwise_not(mask) bg = cv2.bitwise_and(roi, roi, mask=mask) fg = cv2.bitwise_and(roi, roi, mask=mask_inv) cv2.imshow('bg', bg) cv2.imshow('fg', fg) cv2.imshow('panel', panel) k = cv2.waitKey(30) if k == 27: break cap.release() cv2.destroyAllWindows()
Cukup sekian artikelnya! Silahkan dicoba. Semoga bermanfaat. Oh ya, nanti kedepan akan dibuatkan videonya.