Source code for crappy.tool.videoextensoConfig

# coding: utf-8

"""More documentation coming soon !"""

import tkinter as tk
from PIL import ImageTk, Image
import numpy as np
from .cameraConfig import Camera_config
from .._global import OptionalModule

try:
  import cv2
except (ModuleNotFoundError, ImportError):
  cv2 = OptionalModule("opencv-python")


[docs]class VE_config(Camera_config): def __init__(self, camera, ve): self.boxes = None self.select_box = (-1, -1, -1, -1) Camera_config.__init__(self, camera) self.ve = ve def clamp(self, t): if isinstance(t[0], slice): return t[0], min(max(0, t[1]), self.img_shape[1] - 1) else: return min(max(0, t[0]), self.img_shape[0] - 1), t[1] def create_window(self): Camera_config.create_window(self) self.img_label.bind('<1>', self.start_select) self.img_label.bind('<B1-Motion>', self.update_box) self.img_label.bind('<ButtonRelease-1>', self.stop_select) self.save_length_button = tk.Button(self.lower_frame, text="Save L0", command=self.save_length) # self.save_length_button.grid( # column=1, row=len(self.camera.settings_dict)+4) self.save_length_button.pack() def start_select(self, event): self.box_origin = self.get_img_coord(event.y, event.x) def update_box(self, event): oy, ox = self.box_origin y, x = self.get_img_coord(event.y, event.x) self.select_box = (min(oy, y), min(ox, x), max(oy, y), max(ox, x)) def stop_select(self, event): self.ve.detect_spots(self.img[self.select_box[0]:self.select_box[2], self.select_box[1]:self.select_box[3]], self.select_box[0], self.select_box[1]) self.select_box = (-1, -1, -1, -1) if hasattr(self.ve, "spot_list") and len(self.ve.spot_list) > 0: self.boxes = [x['bbox'] for x in self.ve.spot_list] else: self.boxes = None def save_length(self): self.ve.save_length() print("L0 saved:", (self.ve.l0y, self.ve.l0x)) def draw_box(self, box, img): for s in [ (box[0], slice(box[1], box[3])), (box[2], slice(box[1], box[3])), (slice(box[0], box[2]), box[1]), (slice(box[0], box[2]), box[3]) ]: # Turn these pixels white or black for highest possible contrast s = self.clamp(s) img[s] = 255 * int(np.mean(img[s]) < 128) def resize_img(self, sl): rimg = cv2.resize(self.img8[sl[1], sl[0]], tuple(reversed(self.img_shape)), interpolation=0) if self.select_box[0] > 0: lbox = [0] * 4 for i in range(4): n = self.select_box[i] - self.zoom_window[i % 2] * \ self.img.shape[i % 2] n /= (self.zoom_window[2 + i % 2] - self.zoom_window[i % 2]) lbox[i] = int(n / self.img.shape[i % 2] * self.img_shape[i % 2]) self.draw_box(lbox, rimg) if self.boxes: for b in self.boxes: lbox = [0] * 4 for i in range(4): n = b[i] - self.zoom_window[i % 2] * self.img.shape[i % 2] n /= (self.zoom_window[2 + i % 2] - self.zoom_window[i % 2]) lbox[i] = int(n / self.img.shape[i % 2] * self.img_shape[i % 2]) self.draw_box(lbox, rimg) self.c_img = ImageTk.PhotoImage(Image.fromarray(rimg))