### 1.0.16 * Implemented "output" folder for saving user results. * Ignored cv2 errors when preview fails. * Mentioned future AMD support in Readme. * Created this log.
44 lines
1.0 KiB
Python
44 lines
1.0 KiB
Python
import threading
|
|
import cv2
|
|
import os
|
|
|
|
|
|
buffer = []
|
|
|
|
|
|
def worker():
|
|
global buffer
|
|
try:
|
|
while True:
|
|
cv2.waitKey(50)
|
|
if len(buffer) > 0:
|
|
task = buffer.pop(0)
|
|
if task is None:
|
|
cv2.destroyAllWindows()
|
|
else:
|
|
flag, img, title = task
|
|
cv2.imshow(flag, img)
|
|
cv2.setWindowTitle(flag, title)
|
|
cv2.setWindowProperty(flag, cv2.WND_PROP_TOPMOST, 1)
|
|
except Exception as e:
|
|
print('Failed to open preview window. You are not using a local device with GUI support.')
|
|
print(e)
|
|
pass
|
|
|
|
|
|
def save_image(path, img):
|
|
os.makedirs(os.path.dirname(path), exist_ok=True)
|
|
cv2.imwrite(path, img[..., ::-1].copy())
|
|
print(f'Image saved: {path}')
|
|
|
|
|
|
def show_preview(flag, img, title='preview'):
|
|
buffer.append((flag, img[..., ::-1].copy(), title))
|
|
|
|
|
|
def close_all_preview():
|
|
buffer.append(None)
|
|
|
|
|
|
threading.Thread(target=worker, daemon=True).start()
|