【问题标题】:Python cv2, changing camera resolutionPython cv2,改变相机分辨率
【发布时间】:2022-10-04 17:54:15
【问题描述】:

我正在尝试使用 OpenCV 获得一个非常简单的VideoCapture,我可以在其中更改图片之间的分辨率。

我的设置:

  • Debian GNU/Linux 11(靶心)
  • Python 3.9.2
  • OpenCV 4.5.1

已经在最简单的步骤上,OpenCV 给了我不明白的警告

import cv2
cap = cv2.VideoCapture(0)

结果是

[ WARN:0] global ../modules/videoio/src/cap_gstreamer.cpp (961) open OpenCV | GStreamer warning: Cannot query video position: status=0, value=-1, duration=-1

我搜索了这个警告,但我只找到了应该已经解决的 OpenCV 问题的链接(例如参见 here)。

无论如何,警告并不禁止,因为我可以看到来自相机的图像,并且我可以使用cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480) 将相机分辨率从3264x2448 缩小到640x480。 当我尝试将帧大小更改回原来的大小时,就会出现真正的问题:

print(cap.get(cv2.CAP_PROP_FRAME_WIDTH), cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
# Prints: 3264.0 2448.0

org_w = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
org_h = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)

cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)

print(cap.get(cv2.CAP_PROP_FRAME_WIDTH), cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
cap.set(cv2.CAP_PROP_FRAME_WIDTH, org_w)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, org_h)
print(cap.get(cv2.CAP_PROP_FRAME_WIDTH), cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

这会导致一堆警告,并且宽度和高度值设置为0x0

[ WARN:0] global ../modules/videoio/src/cap_gstreamer.cpp (1824) handleMessage OpenCV | GStreamer warning: Embedded video playback halted; module v4l2src0 reported: Internal data stream error.
[ WARN:0] global ../modules/videoio/src/cap_gstreamer.cpp (536) startPipeline OpenCV | GStreamer warning: unable to start pipeline
[ WARN:0] global ../modules/videoio/src/cap_gstreamer.cpp (1085) setProperty OpenCV | GStreamer warning: no pipeline
[ WARN:0] global ../modules/videoio/src/cap_gstreamer.cpp (992) getProperty OpenCV | GStreamer warning: GStreamer: no pipeline
[ WARN:0] global ../modules/videoio/src/cap_gstreamer.cpp (992) getProperty OpenCV | GStreamer warning: GStreamer: no pipeline
0.0 0.0

然后cv2.imshow 失败了。 这不是在图片之间更改相机分辨率的正确方法吗?我应该将相机留在原来的3264x2448 中并在拍摄图像后只使用cv2.resize 来减小图像尺寸吗?

  • 您的相机是否支持 3264x2448 尺寸?这个问题似乎不是关于警告,而是设置相机的宽度和高度,所以我建议你相应地更新你的问题。您也可以查看this answer
  • 是的,支持 3264x2448,它也是默认的初始设置。当我设置较低的分辨率然后回到起始分辨率时,就会出现问题。好的,我会看看我是否可以相应地更改它。

标签: python opencv debian


【解决方案1】:

找到解决方案here。 观察到我的 OpenCV 是用 v4l2 构建的,问题消失了

cap = cv2.VideoCapture(0, cv2.CAP_V4L2)

可以通过以下方式找到构建信息

print(cv2.getBuildInformation())

【讨论】:

    猜你喜欢
    • 2018-01-18
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 2014-09-12
    相关资源
    最近更新 更多