Как дать кнопки запуска, остановки, захвата и закрытия в окне Opencv Cam в Python

Как дать кнопки запуска, остановки, захвата и закрытия в окне видеозахвата, чтобы начать, остановить, сделать снимок, закрыть окно?

Я использую приведенный ниже код, чтобы открыть камеру для потоковой передачи видео:

import cv2.cv as cv
    cv.NamedWindow("camera", 1)
    capture = cv.CaptureFromCAM(0)
    while True:
        img = cv.QueryFrame(capture)
        cv.ShowImage("camera", img)
        if cv.WaitKey(10) == 27:
            break

person PSSR    schedule 03.02.2014    source источник
comment
Кстати, придерживайтесь cv2 api, старый cv не будет существовать долго   -  person berak    schedule 03.02.2014
comment
см. pyimagesearch.com/2016/05/23/opencv-with- ткинтер   -  person Wolfgang Fahl    schedule 10.11.2019


Ответы (2)


Кнопки невозможны, но вы можете использовать щелчки мыши и нажатия клавиш для управления своим видео. Например, используйте левый щелчок для переключения воспроизведения/паузы и записи с помощью нажатия клавиши:

import cv2

run=False
frame=0
path=#some video path

def foo(event, x, y, flags, param):
    global run
    global frame
    #check which mouse button was pressed
    #e.g. play video on left mouse click
    if event == cv2.EVENT_LBUTTONDOWN:
        run= not run
        while run:

            frame+=1
            frame=cap.read()[1]
            cv2.imshow(window_name, frame)
            key = cv2.waitKey(5) & 0xFF
            if key == ord("v"):
                pass
                #do some stuff on key press

    elif event == cv2.EVENT_RBUTTONDOWN:
        pass
        #do some other stuff on right click


window_name='videoPlayer'
cv2.namedWindow(window_name)
cv2.setMouseCallback(window_name, foo)

cap=cv2.VideoCapture(path)
person jlarsch    schedule 14.02.2017

У меня была эта проблема раньше с OpenCV. Насколько мне известно, в OpenCV нет функций для кнопок.

Однако я использовал Tkinter и создал холст вместе с некоторыми кнопками (в вашем случае это будут «Пуск», «Стоп», «Захват», «Закрыть»). Каждый кадр, снятый с помощью OpenCV, я рисовал на холсте Tkinter.

Я использовал это для покадровой программы, поэтому я не уверен, насколько хорошо этот метод будет работать в реальном времени.

Очень быстрый пример кода:

from Tkinter import *
import cv2.cv as cv

root = Tk()

w = Canvas(root, width=500, height=300, bd = 10, bg = 'white')
w.grid(row = 0, column = 0, columnspan = 2)

b = Button(width = 10, height = 2, text = 'Button1')
b.grid(row = 1, column = 0)
b2 = Button(width = 10, height = 2, text = 'Button2')
b2.grid(row = 1,column = 1)

cv.NamedWindow("camera",1)
capture = cv.CaptureFromCAM(0)

while True:
    img = cv.QueryFrame(capture)
    canvas.create_image(0,0, image=img)
    if cv.WaitKey(10) == 27:
        break

root.mainloop()

Это может сработать, а может и не сработать сразу же, поскольку я не могу проверить это прямо сейчас. Одно потенциальное изменение, которое я вижу, это формат изображения, который использует OpenCV. Возможно, вам придется использовать одну из функций преобразования, чтобы изменить формат.

person SimonPJ    schedule 03.02.2014
comment
привет SimonPJ, не могли бы вы поделиться своим образцом кода для создания (пуск, остановка, захват, закрытие) кнопок и их функций в python. - person PSSR; 03.02.2014
comment
Если найду код, с удовольствием поделюсь. Я сделал это некоторое время назад, и это было больше игрой, поэтому я не могу ничего обещать. - person SimonPJ; 03.02.2014
comment
Привет, SimonPJ, не могли бы вы поделиться примером кода, если вы его нашли, я не могу найти какое-либо решение для этого - person PSSR; 03.02.2014
comment
Я не на компьютере, на котором он сохранен, но я могу сделать небольшой пример кода - person SimonPJ; 03.02.2014
comment
Привет, у меня не работает, пожалуйста, дайте мне проверенный, если возможно, спасибо - person PSSR; 03.02.2014