为啥我使用承保代码从网络摄像头获取图像而不是视频

Posted

技术标签:

【中文标题】为啥我使用承保代码从网络摄像头获取图像而不是视频【英文标题】:why am I getting image instead of video from webcam using the underwritten code为什么我使用承保代码从网络摄像头获取图像而不是视频 【发布时间】:2021-09-25 10:26:02 【问题描述】:

我写的代码是-

import cv2

cap = cv2.VideoCapture(0)

while True:
    success, img = cap.read()

    cv2.imshow("Image", img)
    cv2.waitKey(0)

我应该改变什么来获得视频输出而不是图像输出。请帮助。(目前使用 pycharm)。每当我运行代码时,它都会提供一些连续的图片输出。

【问题讨论】:

好的,谢谢大家。现在将waitkey更改为1后它可以工作了。但是有人知道为什么我会得到像倒置视频这样的镜像吗? 【参考方案1】:

根据 OpenCV 文档,视频捕获循环的一般形式应如下所示:

import cv2 as cv
cap = cv.VideoCapture(0)

if not cap.isOpened():
    print("Cannot open camera")
    exit()

while True:

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

    # if frame is read correctly ret is True
    if not ret:
        print("Can't receive frame (stream end?). Exiting ...")
        break

    # Display the resulting frame
    cv.imshow('frame', frame)

    if cv.waitKey(1) == ord('q'):
        break

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

您的代码未按预期工作,因为您正在调用cv.waitKey(0)。这将无限显示窗口,直到任何按键。您应该调用cv.waitKey(1),因为它会显示帧 1 毫秒并继续下一个。仅当您按下 Q 键时,ord('q') 的相等性检查才允许循环到 break

【讨论】:

【参考方案2】:
cv2.waitKey(1)

您对waitKey 的论点应该是(1),而不是(0)

【讨论】:

以上是关于为啥我使用承保代码从网络摄像头获取图像而不是视频的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Java 从网络摄像头获取视频和音频流?

如何将视频从我的应用程序流式传输到网络?

从ip camera的实时视频源中提取图像

如何使用 v4l2 linux 界面从网络摄像头获取视频?

为啥用opencv捕获摄像头视频流时,突然显示框内就变灰了呢

使用图片框从网络摄像头捕获图像