У меня есть скрипт, который просматривает 4 USB-камеры на отдельных вкладках и делает снимок при нажатии клавиши пробела. Однако при нажатии клавиши пробела в конкретном окне предварительного просмотра c он делает снимок этого и только этого предварительного просмотра. Точно так же нажатие es c закрывает окно, на котором я сосредоточен, но я должен сделать это для каждого окна предварительного просмотра камеры, чтобы выйти из сценария. Есть ли способ, чтобы события выхода и захвата событий происходили одним и тем же нажатием клавиши? Или это невозможно с многопоточностью?
import cv2
import threading
class camThread(threading.Thread):
def __init__(self, previewName, camID):
threading.Thread.__init__(self)
self.previewName = previewName
self.camID = camID
def run(self):
print("Starting " + self.previewName)
camPreview(self.previewName, self.camID)
def camPreview(previewName, camID):
cv2.namedWindow(previewName)
cam = cv2.VideoCapture(camID)
if cam.isOpened():
rval, frame = cam.read()
else:
rval = False
while rval:
cv2.imshow(previewName, frame)
rval, frame = cam.read()
key = cv2.waitKey(20)
if key == 27: # exit on ESC
break
key = cv2.waitKey(20)
if key == 32:
img_name = "opencv_frame_{}.png".format(camID)
cv2.imwrite(img_name, frame)
print("{} written!".format(img_name))
cv2.destroyWindow(previewName)
# Create threads as follows
thread1 = camThread("Camera 1", 0)
thread2 = camThread("Camera 2", 1)
thread3 = camThread("Camera 3", 2)
thread4 = camThread("Camera 4", 3)
thread1.start()
thread2.start()
thread3.start()
thread4.start()
print()
print("Active threads", threading.activeCount())