Skip to content
Snippets Groups Projects
Select Git revision
  • dc58f1006187cdbf893f6d97ff31787a9bf69430
  • master default protected
  • v3-modify-mail
  • snyk-fix-207483a1e839c807f95a55077e86527d
  • translations_3b5aa4f3c755059914cfa23d7d2edcde_ru
  • translations_6e4a5e377a3e50f17e6402264fdbfcc6_ru
  • translations_3b5aa4f3c755059914cfa23d7d2edcde_fa_IR
  • translations_en-yml--master_fa_IR
  • snyk-fix-7d634f2eb65555f41bf06d6af930e812
  • translations_en-yml--master_ar
  • translations_3b5aa4f3c755059914cfa23d7d2edcde_el
  • jfederico-patch-1
  • v2
  • v3
  • v1
  • release-3.1.0.2
  • release-3.1.0.1
  • release-3.1.0
  • release-2.14.8.4
  • release-3.0.9.1
  • release-3.0.9
  • release-3.0.8.1
  • release-2.14.8.3
  • release-3.0.8
  • release-3.0.7.1
  • release-2.14.8.2
  • release-3.0.7
  • release-3.0.6.1
  • release-3.0.6
  • release-3.0.5.4
  • release-3.0.5.3
  • release-2.14.8.1
  • release-3.0.5.2
  • release-3.0.5.1
  • release-3.0.5
35 results

external_controller.rb

Blame
  • 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()