Coverage for skcvideo/list.py: 0%

66 statements  

« prev     ^ index     » next       coverage.py v7.6.1, created at 2024-10-02 14:10 +0200

1import os 

2 

3import cv2 

4import numpy as np 

5 

6from skcvideo.reader import WHITE, put_text 

7 

8 

9class Button: 

10 def __init__(self, hitbox, callback, data=None): 

11 self.hitbox = hitbox 

12 self.data = data 

13 self.given_callback = callback 

14 

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) 

20 

21 

22class ImageGenerator: 

23 def __init__(self, images_dir): 

24 self.to_exit = False 

25 

26 self.keydict = {"k": self.next, "j": self.previous, "q": self.exit} 

27 

28 self.buttons = [] 

29 

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) 

37 

38 self.i = 0 

39 self.refresh() 

40 

41 cv2.namedWindow("image") 

42 cv2.setMouseCallback("image", self.click_event) 

43 

44 @property 

45 def image_to_disp(self): 

46 return self.big_image 

47 

48 def next(self): 

49 if self.i < len(self.images_list) - 1: 

50 self.i += 1 

51 self.refresh() 

52 

53 def previous(self): 

54 if self.i > 0: 

55 self.i -= 1 

56 self.refresh() 

57 

58 def exit(self): 

59 self.to_exit = True 

60 

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

69 

70 def refresh(self): 

71 self.big_image = np.zeros((150, 150, 3), dtype=np.uint8) 

72 

73 self.image = self.images_list[self.i] 

74 

75 put_text(self.big_image, f"i: {self.i}", (20, 30), WHITE) 

76 

77 self.big_image[:, :75, :] = self.image 

78 

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

86 

87 

88if __name__ == "__main__": 

89 import sys 

90 

91 images_dir = sys.argv[1] 

92 

93 ImageGenerator(images_dir).start()