Создание кнопки захвата в окне - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть этот код, который открывает видео с камеры.

cap = cv2.VideoCapture(0)
while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()

    # Display the resulting frame
    cv2.imshow('frame',gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()

, как вы можете видеть в приведенном выше коде, я использую функцию cv2.imshow, чтобы показать видео.

Мне нужно создать кнопкузахватить видео.

Мой вопрос, возможно ли создать кнопку внутри окна, созданную функцией cv2.imshow?

1 Ответ

0 голосов
/ 30 апреля 2019

В комментариях представлены хорошие опции, сочетания клавиш и / или ткинтер. Если вам нужен визуальный интерфейс, но вы не хотите использовать tkinter, вы можете воспользоваться одним из следующих «приемов»:

  • OpenCV поддерживает ползунки, поэтому вы можете использовать их с диапазоном 1 для создания интерфейса включения / выключения.

  • Отображение изображения кнопки в отдельном окне. Добавьте ответный сигнал мыши и проверьте, находятся ли щелчки мыши в пределах размеров кнопки.

Вы даже можете объединить их в одной панели управления:
enter image description here

Код:

import cv2
import numpy as np 

# button dimensions (y1,y2,x1,x2)
button = [20,60,50,250]

# function that handles the mousclicks
def process_click(event, x, y,flags, params):
    # check if the click is within the dimensions of the button
    if event == cv2.EVENT_LBUTTONDOWN:
        if y > button[0] and y < button[1] and x > button[2] and x < button[3]:   
            print('Clicked on Button!')

# function that handles the trackbar
def startCapture(val):
    # check if the value of the slider 
    if val == 1:
        print('Capture started!')
    else:
        print('Capture stopped!')            

# create a window and attach a mousecallback and a trackbar
cv2.namedWindow('Control')
cv2.setMouseCallback('Control',process_click)
cv2.createTrackbar("Capture", 'Control', 0,1, startCapture)

# create button image
control_image = np.zeros((80,300), np.uint8)
control_image[button[0]:button[1],button[2]:button[3]] = 180
cv2.putText(control_image, 'Button',(100,50),cv2.FONT_HERSHEY_PLAIN, 2,(0),3)

#show 'control panel'
cv2.imshow('Control', control_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...