Args: img (np.ndarray): an image (expect BGR) to show. lclick_cb, rclick_cb: a callback ``func(img, x, y)`` for left/right click event. kwargs: can be {key_cb_a: callback_img, key_cb_b: callback_img}, to specify a callback ``func(img)`` for keypress. Som
(img, lclick_cb=None, rclick_cb=None, **kwargs)
| 23 | |
| 24 | |
| 25 | def interactive_imshow(img, lclick_cb=None, rclick_cb=None, **kwargs): |
| 26 | """ |
| 27 | Args: |
| 28 | img (np.ndarray): an image (expect BGR) to show. |
| 29 | lclick_cb, rclick_cb: a callback ``func(img, x, y)`` for left/right click event. |
| 30 | kwargs: can be {key_cb_a: callback_img, key_cb_b: callback_img}, to |
| 31 | specify a callback ``func(img)`` for keypress. |
| 32 | |
| 33 | Some existing keypress event handler: |
| 34 | |
| 35 | * q: destroy the current window |
| 36 | * x: execute ``sys.exit()`` |
| 37 | * s: save image to "out.png" |
| 38 | """ |
| 39 | name = 'tensorpack_viz_window' |
| 40 | cv2.imshow(name, img) |
| 41 | |
| 42 | def mouse_cb(event, x, y, *args): |
| 43 | if event == cv2.EVENT_LBUTTONUP and lclick_cb is not None: |
| 44 | lclick_cb(img, x, y) |
| 45 | elif event == cv2.EVENT_RBUTTONUP and rclick_cb is not None: |
| 46 | rclick_cb(img, x, y) |
| 47 | cv2.setMouseCallback(name, mouse_cb) |
| 48 | key = cv2.waitKey(-1) |
| 49 | while key >= 128: |
| 50 | key = cv2.waitKey(-1) |
| 51 | key = chr(key & 0xff) |
| 52 | cb_name = 'key_cb_' + key |
| 53 | if cb_name in kwargs: |
| 54 | kwargs[cb_name](img) |
| 55 | elif key == 'q': |
| 56 | cv2.destroyWindow(name) |
| 57 | elif key == 'x': |
| 58 | sys.exit() |
| 59 | elif key == 's': |
| 60 | cv2.imwrite('out.png', img) |
| 61 | elif key in ['+', '=']: |
| 62 | img = cv2.resize(img, None, fx=1.3, fy=1.3, interpolation=cv2.INTER_CUBIC) |
| 63 | interactive_imshow(img, lclick_cb, rclick_cb, **kwargs) |
| 64 | elif key == '-': |
| 65 | img = cv2.resize(img, None, fx=0.7, fy=0.7, interpolation=cv2.INTER_CUBIC) |
| 66 | interactive_imshow(img, lclick_cb, rclick_cb, **kwargs) |
| 67 | |
| 68 | |
| 69 | def _preprocess_patch_list(plist): |
no outgoing calls
no test coverage detected