Coverage for skcvideo/list.py: 0%
66 statements
« prev ^ index » next coverage.py v7.6.1, created at 2024-10-02 14:10 +0200
« prev ^ index » next coverage.py v7.6.1, created at 2024-10-02 14:10 +0200
1import os
3import cv2
4import numpy as np
6from skcvideo.reader import WHITE, put_text
9class Button:
10 def __init__(self, hitbox, callback, data=None):
11 self.hitbox = hitbox
12 self.data = data
13 self.given_callback = callback
15 def callback(self, *kwargs):
16 if self.data is None:
17 return self.given_callback(*kwargs)
18 else:
19 return self.given_callback(self.data, *kwargs)
22class ImageGenerator:
23 def __init__(self, images_dir):
24 self.to_exit = False
26 self.keydict = {"k": self.next, "j": self.previous, "q": self.exit}
28 self.buttons = []
30 self.images_list = []
31 for filename in os.listdir(images_dir):
32 ext = os.path.splitext(filename)[1]
33 if ext in [".png", ".jpg"]:
34 image_path = os.path.join(images_dir, filename)
35 image = cv2.imread(image_path)
36 self.images_list.append(image)
38 self.i = 0
39 self.refresh()
41 cv2.namedWindow("image")
42 cv2.setMouseCallback("image", self.click_event)
44 @property
45 def image_to_disp(self):
46 return self.big_image
48 def next(self):
49 if self.i < len(self.images_list) - 1:
50 self.i += 1
51 self.refresh()
53 def previous(self):
54 if self.i > 0:
55 self.i -= 1
56 self.refresh()
58 def exit(self):
59 self.to_exit = True
61 def click_event(self, event, x, y, flags, param):
62 if event == cv2.EVENT_LBUTTONUP:
63 if hasattr(self, "buttons"):
64 for button in self.buttons:
65 x1, y1, x2, y2 = button.hitbox
66 if x1 < x < x2 and y1 < y < y2:
67 button.callback(x, y)
68 self.refresh()
70 def refresh(self):
71 self.big_image = np.zeros((150, 150, 3), dtype=np.uint8)
73 self.image = self.images_list[self.i]
75 put_text(self.big_image, f"i: {self.i}", (20, 30), WHITE)
77 self.big_image[:, :75, :] = self.image
79 def start(self):
80 while not self.to_exit:
81 cv2.imshow("image", self.image_to_disp)
82 key = cv2.waitKey(1) & 0xFF
83 for k, fun in self.keydict.items():
84 if key == ord(k):
85 fun()
88if __name__ == "__main__":
89 import sys
91 images_dir = sys.argv[1]
93 ImageGenerator(images_dir).start()