-1

我正在尝试运行最简单的脚本来实时查看笔记本电脑的摄像头。但不幸的是,在启动窗口显示后,我只显示了一个永远不会更新的框架。

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 和下载的轮子将它安装在单独的环境中。窗口显示 OK,并且显示来自摄像头的图像,但是是静态的。然而,该程序并没有挂起,因为它等待一个键被按下并在之后正确关闭。

可能是什么原因?

4

3 回答 3

0

尝试使用此循环:

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

于 2020-06-21T17:00:04.207 回答
-1

尝试这个:

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()
于 2020-06-21T16:58:51.717 回答
-1

我希望这会奏效,这是一个快速简单的解决方案。

您可以通过按 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()
于 2020-06-21T17:05:47.033 回答