Как определить Левый и Правый Клик вместе с 0xFF - PullRequest
1 голос
/ 25 марта 2020

У меня есть программа захвата изображения, которая будет захватывать любой кадр с веб-камеры при нажатии определенной клавиши на клавиатуре. В настоящее время я хочу создать альтернативу помимо использования клавиатуры, которая должна использовать щелчок мышью, но мне нужно, чтобы оба работали. Вот код:

    while True:
        # Capture frame-by-frame
        ret, frame = video_capture.read()

        pressedKey = cv2.waitKey(1) & 0xFF

        #take picture
        if pressedKey == ord('c'):
            cv2.imwrite('./results/'+str(subject)+'_'+str(position)+'_'+rgba[counter]+'.png',frame)
            counter= counter + 1
            details=str(subject)+','+str(position)+','+str(counter)+'\n'
            with open('./details.txt', 'a') as f:
                f.write(details)
            print("Image taken succesfully")
        #quit
        elif pressedKey== ord('q'):
            print("Closing application")
            break
        cv2.imshow('Video', frame)

Я хочу сделать снимок, нажав либо «c», либо используя LMouseClick, и выйдите, нажав «q» или RMouseClick.

1 Ответ

0 голосов
/ 25 марта 2020

Я немного изменил ваш код, поскольку у меня нет информации о предмете, должности и т. Д. c.

В любом случае, вот окончательная версия, которая работает так, как вы хотели:

import cv2
video_capture = cv2.VideoCapture(0)

status = 1
# mouse callback function
def mouse_func(event,x,y,flags,param):
    global status
    if event == cv2.EVENT_LBUTTONDOWN:
        cv2.imwrite('save.png',frame)
        details='details'
        with open('./details.txt', 'a') as f:
            f.write(details)
        print("Image taken succesfully")

    elif event == cv2.EVENT_RBUTTONDOWN:
        status = 0
        print("Closing application")

cv2.namedWindow('Video')
cv2.setMouseCallback('Video',mouse_func)

while True:
    # Capture frame-by-frame
    ret, frame = video_capture.read()
    pressedKey = cv2.waitKey(1) & 0xFF

    #take picture
    if pressedKey == ord('c'):
        cv2.imwrite('save.png',frame)
        details='details'
        with open('./details.txt', 'a') as f:
            f.write(details)
        print("Image taken succesfully")
    #quit
    elif pressedKey== ord('q') or status == 0:
        print("Closing application")
        break
    cv2.imshow('Video', frame)
print("Application Closed")
cv2.destroyAllWindows()

Вы должны создать функцию обратного вызова (mouse_func), затем вы должны проверить правый и левый щелчок, используя EVENT_LBUTTONDOWN и EVENT_RBUTTONDOWN.

Обратите внимание, что существует глобальная переменная status, которая устанавливается в 0, если происходит щелчок правой кнопкой мыши. Затем в главном l oop мы проверяем, является ли нажатая клавиша q ИЛИ, если status установлено на 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...