Select Git revision
Forked from
Peter Gerwinski / bs
Source project has a limited visibility.
filter_pipeline.py 3.05 KiB
import cv2
import numpy as np
import matplotlib.pyplot as plt
import time
from datetime import datetime
import pandas as pd
VIDEO = 'Videomaterial/WIN_20230414_13_41_55_Pro.mp4'
capture = cv2.VideoCapture(VIDEO)
last = None
frame = None
diff = None
window = 'Filter'
# Einstellungen
min_threshold = 30
max_threshold = 110
img_threshold = 100
line_threshold = 30
spanne = 2
def overlay_imgs(base, top):
topgray = cv2.cvtColor(top, cv2.COLOR_RGB2GRAY)
_, mask = cv2.threshold(topgray, 10, 255, cv2.THRESH_BINARY)
mask_inv = cv2.bitwise_not(mask)
# Now black-out the area of overlay
img1_bg = cv2.bitwise_and(base,base,mask = mask_inv)
# Take only region of from logo image.
img2_fg = cv2.bitwise_and(top,top,mask = mask)
return cv2.add(img1_bg, img2_fg)
def nothing_cb(val):
pass
# To control the Size of the Disply
cv2.namedWindow(window, cv2.WINDOW_AUTOSIZE)
cv2.createTrackbar('Line Threshold: ', window, line_threshold, 100, nothing_cb)
import filters
pipeline = [
('Original', filters.none),
('Gray scale', filters.grayscale),
('Contrast and Blur', filters.medianBlur),
('Video Diff', filters.video_absdiff),
('Canny edge detection', filters.filter_canny),
('Morph close', filters.filter_close),
#('Morph open', filters.filter_open),
('Point extraction', filters.points_extract),
('Polyfit lines', filters.points_overlay)
]
state = {} # Empty dictionary to store filters state
info = {
'abs_diff': 5, # 5 images for difference,
'dim': (1920, 1080), #
'params': {}
}
result = None
visible_filter_idx = 0
while capture.isOpened():
# ret is the stat of the reading
ret, frame = capture.read()
if ret == True:
frame, _ = filters.resize(None, frame, None)
# Apply
info['params']['line'] = cv2.getTrackbarPos('Line Threshold: ', window)
result = frame
for i, (name, filter) in enumerate(pipeline):
# Apply each filter
result, overlay = filter(info, result, state)
if result is None:
break
if visible_filter_idx == i:
image = result.copy()
if overlay:
image = overlay_imgs(frame, image)
cv2.putText(image, f'Filter #{i}: {name}', (10, 30), cv2.FONT_HERSHEY_PLAIN,
1, (255, 0, 0), 2, cv2.LINE_AA)
cv2.imshow('Filter', image)
code = cv2.waitKey(33) & 0xFF
if code == ord('s'):
now = datetime.now()
str = now.strftime("%d_%m_%Y_%H_%M_%S")
cv2.imwrite(f'Filter/IMG_{str}.png', result)
elif code == ord('d'):
visible_filter_idx += 1
if visible_filter_idx >= len(pipeline):
visible_filter_idx = len(pipeline) - 1
elif code == ord('a'):
visible_filter_idx -= 1
if visible_filter_idx < 0:
visible_filter_idx = 0
elif code & 0xFF == ord('q'):
break
else:
break
capture.release()
cv2.destroyAllWindows()