Изображение камеры в реальном времени OpenCV не движется - PullRequest
0 голосов
/ 21 июня 2020

Пытаюсь запустить самый простой скрипт для просмотра камеры ноутбука в реальном времени. Но, к сожалению, после запуска окно отображается, но отображается только один кадр, который никогда не обновляется.

import cv2
cap = cv2.VideoCapture(0)
while True:
    ret, img = cap.read()
    cv2.imshow('test', img)
    if cv2.waitKey(-1):
        break
cv2.destroyAllWindows()
cap.release()

Я следовал инструкциям по установке этого на Windows и установил его в отдельной среде , используя pip и загруженное колесо. В окне отображается ОК, и изображение с камеры отображается, но со статусом c. Однако программа не зависает, поскольку ожидает нажатия клавиши и после этого корректно закрывается.

В чем может быть причина?

Ответы [ 3 ]

0 голосов
/ 21 июня 2020

Попробуйте использовать это l oop:

while True:
    ret, img = cap.read()
    cv2.imshow('test', img)
    keypressed = cv2.waitKey(30)
    if keypressed == ord('q'):
        break

Аргумент cv2.waitKey(delay) - задержка в миллисекундах, а возвращаемое значение - нажатая клавиша:

функция waitKey ожидает ключевого события бесконечно (когда ?????≤0) или в течение миллисекунд задержки, если оно положительное. [..]

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

См .: https://docs.opencv.org/4.1.0/d7/dfc/group__highgui.html#ga5628525ad33f52eab17feebcfba38bd7

0 голосов
/ 21 июня 2020

Надеюсь, это сработает, это быстрое и простое решение.

вы можете захватить изображение, нажав c и q для выхода из окна

import cv2

cap = cv2.VideoCapture(0)
count=0 
while(True):
    ret, frame = cap.read()
    cv2.imshow("imshow",frame)
    key=cv2.waitKey(30)
    if key==ord('q'):
        break
    if key==ord('c'):
        count+=1
        cv2.imwrite('/home/user/Desktop/image'+str(count)+'.png', frame)

cap.release()
cv2.destroyAllWindows()
0 голосов
/ 21 июня 2020

Попробуйте следующее:

import numpy as np
import cv2

cap = cv2.VideoCapture(0)

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

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

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