Show images - accept key presses
- React to various keys
- Close application if use closes the image window
- Add slider to change the size of the image
examples/opencv/show_images.py
import cv2 as cv import sys import os WAIT_TIME = 100 START_HEIGHT = 300 MAX_HEIGHT = 600 def resize(img, current_height): #print(img.shape) height, width, colors = img.shape if height > current_height: scale = current_height/height new_height = int(height * scale) new_width = int(width * scale) img = cv.resize(img, (new_width, new_height), interpolation=cv.INTER_AREA) return img def slider_changed(event): pass #print('slider') #print(event) def get_size(): slider = cv.getWindowProperty('img', cv.WND_PROP_VISIBLE) #print(slider) current_height = START_HEIGHT if slider > 0: current_height = cv.getTrackbarPos("Size", "img") #print(current_height) return current_height def main(): if len(sys.argv) != 2: exit(f"Usage: {sys.argv[0]} DIRNAME") dirname = sys.argv[1] files = list(filter(lambda thing: not os.path.isdir(thing), map(lambda filename: os.path.join(dirname, filename), os.listdir(dirname)))) #print(files) prev_idx = -1 prev_height = 0 idx = 0 cv.namedWindow("img") cv.createTrackbar("Size", "img", START_HEIGHT, MAX_HEIGHT, slider_changed) ##cv.resizeWindow("slider", 640, 45) while True: current_height = get_size() if idx != prev_idx or current_height != prev_height: prev_idx = idx prev_height = current_height filename = files[idx] img = cv.imread(filename) img = resize(img, current_height) cv.imshow('img', img) # Make sure application exits if we close the window of the image visible = cv.getWindowProperty('img', cv.WND_PROP_VISIBLE) if visible == 0.0: cv.destroyAllWindows() break key = cv.waitKey(WAIT_TIME) if key == -1: continue #print(f'key {key} pressed') if key == ord('q') or key == ord('x'): cv.destroyAllWindows() break if key == ord('n'): idx += 1 if key == ord('p'): idx -= 1 idx = idx % len(files) main()