Created
August 31, 2023 10:12
-
-
Save companje/a8f77018c7d7919ed3a31bd6c0a00ed1 to your computer and use it in GitHub Desktop.
equalize brightness with CLAHE +2 step background learning
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import cv2 | |
import numpy as np | |
from Tracker import Tracker | |
from TouchEvents import TouchEvents | |
from pythonosc import udp_client as osc | |
from scipy.signal import convolve2d | |
w,h=640,480 | |
mouseX, mouseY = 0,0 | |
exposure=-8 | |
palette = cv2.imread('data/palette256.png')[0,:,:] | |
finger_tpl = cv2.imread('data/finger.png',cv2.IMREAD_GRAYSCALE) | |
bg_subtractor = cv2.createBackgroundSubtractorMOG2(history=500, varThreshold=20, detectShadows=False) | |
bg_subtractor2 = cv2.createBackgroundSubtractorMOG2(history=500, varThreshold=20, detectShadows=False) | |
map_x = cv2.imread("data/map_x.tif", cv2.IMREAD_UNCHANGED).astype(np.float32) | |
map_y = cv2.imread("data/map_y.tif", cv2.IMREAD_UNCHANGED).astype(np.float32) | |
cap = cv2.VideoCapture(0) | |
cap.set(cv2.CAP_PROP_EXPOSURE,exposure) | |
cv2.namedWindow("img", cv2.WINDOW_NORMAL); cv2.moveWindow("img",0*640,0) | |
cv2.namedWindow("bg", cv2.WINDOW_NORMAL); cv2.moveWindow("bg",1*640,0) | |
cv2.namedWindow("masked", cv2.WINDOW_NORMAL); cv2.moveWindow("masked",2*640,0) | |
cv2.namedWindow("fg", cv2.WINDOW_NORMAL); cv2.moveWindow("fg",3*640,0) | |
cv2.namedWindow("clr", cv2.WINDOW_NORMAL); cv2.moveWindow("clr",4*640,0) | |
while True: | |
ret, img = cap.read() | |
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) | |
img = cv2.remap(img, map_x, map_y, cv2.INTER_LINEAR) | |
fg_mask = bg_subtractor.apply(img, learningRate=.0001) | |
fg = cv2.bitwise_and(img, img, mask=fg_mask) | |
bg = bg_subtractor.getBackgroundImage() | |
bg_inv = 255 - bg | |
bg_mask = cv2.inRange(bg_inv, 135, 180) # FIXME: dit hoeft niet op inverse beeld | |
bg_inv = cv2.bitwise_and(bg_inv, bg_mask) # apply color range as binary mask | |
masked = cv2.bitwise_and(img, bg_mask) # mask fg | |
bg = cv2.bitwise_and(bg, bg_mask) # mask bg | |
difference = cv2.absdiff(masked, bg) | |
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8)) # Pas adaptieve histogram equalization toe op het verschilbeeld | |
enhanced_difference = clahe.apply(difference) | |
fg = cv2.add(masked, enhanced_difference) | |
fg_mask = bg_subtractor2.apply(fg, learningRate=.0001) | |
fg = cv2.bitwise_and(fg, fg, mask=fg_mask) | |
fg = cv2.equalizeHist(fg) | |
clr = palette[fg.astype(int)] | |
cv2.imshow("img",img) | |
cv2.imshow("bg",bg) | |
cv2.imshow("masked",masked) | |
cv2.imshow("fg",fg) | |
cv2.imshow("clr",clr) | |
key = cv2.waitKey(1) & 0xFF | |
if key == 27: | |
break | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment