Skip to content

Instantly share code, notes, and snippets.

@companje
Created August 31, 2023 10:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save companje/a8f77018c7d7919ed3a31bd6c0a00ed1 to your computer and use it in GitHub Desktop.
Save companje/a8f77018c7d7919ed3a31bd6c0a00ed1 to your computer and use it in GitHub Desktop.
equalize brightness with CLAHE +2 step background learning
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