当前位置: 首页 > 知识库问答 >
问题:

OpenCV:如何读取自动检测api和视频捕获格式

戚俊健
2023-03-14

我在c920网络摄像头上将分辨率设置为全高清(宽=1920,高=1080),并使用cv2。支持此摄像头的CAP_DSHOW API。

然而,fps非常低。我尝试的下一件事是通过简单地编写

camera = cv2.VideoCapture(0, cv2.CAP_ANY)

现在我得到了很高的fps,但它不再是16:9格式了,它在图像的左右两侧都有一些黑色的边栏,就像这篇文章:OpenCV捕获带有黑色边栏的imagem

有没有办法:

  1. 找出哪个API已被自动检测?
  2. 找出正在使用的格式?
  3. 我可以手动更改格式后,而不会失去很多获得的性能?

或者你对如何处理这个问题有更好的想法?

打印相机表示仍然是全高清:

(grabbed, frame0) = camera.read()
print(len(frame0[0])) # = 1920
print(len(frame0)) # = 1080

共有1个答案

苗烈
2023-03-14

多设备(网络摄像头)连接?在我回答之前有一个简短的问题,你连接了另一个网络摄像头吗?即一个集成的笔记本电脑摄像头,除了c920?在这个答案的底部,您可以找到一个函数来检查openCV识别的所有可用设备。

回答1:
是的,有getBackendName()来检查openCV自动检测到什么。请参阅下面的片段(链接到文档):

video = cv2.VideoCapture(1, cv2.CAP_ANY)
print(video.getBackendName())

答复2

video = cv2.VideoCapture(1, cv2.CAP_ANY)
print(video.get(cv2.CAP_PROP_FRAME_HEIGHT))
# Regardless of the auto selected API you can change the format again with the .set method
video.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
video.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)

检查可用设备
这将是一个快速函数,为您提供所有可用设备的指示

def get_available_devices():
    index = 0
    arr = []
    while True:
        cap = cv2.VideoCapture(index)
        if not cap.read()[0]:
            break
        else:
            arr.append(index)
        cap.release()
        index += 1
    return arr
 类似资料:
  • 本文向大家介绍opencv实现读取视频保存视频,包括了opencv实现读取视频保存视频的使用技巧和注意事项,需要的朋友参考一下 不得不说opencv是个强大的东东,以前做一个项目的一个模块时使用到进行图形处理,这次是想将一个视频的播放放慢,以前在网上看到opencv有这个功能,今天就不小心尝试了下,东西不多,主要是做个小记录还有一点要注意的小问题说一下,代码不多,基本上也都是copy的网上的 有几

  • 我尝试用全高清分辨率的罗技C920摄像头捕捉视频。它提供30 fps与此分辨率。 它以30 fps的速度与windows摄像头应用程序配合使用,但无论我如何尝试,我都无法通过opencv videoCapture获得这种fps速度。 注意:我使用windows 10和vs15。我尝试了不同的usb端口,opencv版本和编解码器。结果是相同的,〜5 fps。 我测量fps忽略前10帧。下面是我的计

  • 有什么方法可以直接从自动生成的频道(比如这个https://www . YouTube . com/channel/UC-9-kyt w8 zkzndhqj 6 fgpwq/videos)中获取视频,而不必访问所有的播放列表? 使用https://www.googleapis.com/youtube/v3/search?part=snippet

  • 我正在尝试从YouTube自动生成频道(又名主题)获取所有视频。我让我的用户添加到YT频道的链接,我发送频道ID以检索视频。 在常规情况下,当通道不是自动生成的时,我正在使用此终结点:https://www.googleapis.com/youtube/v3/channels?part=snippet 此endpoint返回发布到此频道的视频列表。主题的问题是视频列表返回空... 以下请求的示例:

  • 我正试图从ip摄像机捕捉视频,并保存为avi视频文件。同时脚本将包含人脸的帧保存为jpeg文件。当脚本执行这些任务时,cpu使用率约为100%。正因为如此,我只想限制人脸检测的帧率。

  • 硬件: 1.树莓派2 2.树莓派相机 软件: 1。OpenCV 2.4。11 2。用C语言编程 我有以下简单的代码,可以从摄像机捕获视频并在窗口中显示 帧大小始终为640 x 480,尝试更改帧的宽度和高度(如注释行所示)没有帮助,并且保持为640 x 480。 我正在寻找一种方法,将帧的宽度和高度从我的代码(而不是外壳)更改为1920 x 1080 如果可以通过OpenCV或V4l2驱动程序完成