首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python cv2,改变相机分辨率

Python cv2,改变相机分辨率
EN

Stack Overflow用户
提问于 2022-09-20 15:17:29
回答 1查看 151关注 0票数 0

我试图得到一个非常简单的VideoCapture与OpenCV,在那里,我可以改变分辨率之间的图片。

我的设置:

  • Debian /Linux 11
  • 3.9.2
  • OpenCV 4.5.1

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

代码语言:javascript
运行
复制
import cv2
cap = cv2.VideoCapture(0)

结果在

代码语言:javascript
运行
复制
[ 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)。

无论如何,这个警告并不令人望而却步,因为我能够从相机中看到图像,并且可以使用3264x2448cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)将相机分辨率从cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)缩小到640x480。当我试图将帧大小更改回原始时,就会出现真正的问题:

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
[ 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来缩小图像拍摄后的图像大小?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-04 09:54:15

找到了解决方案here。注意到我的OpenCV是用v4l2构建的,这个问题消失了

代码语言:javascript
运行
复制
cap = cv2.VideoCapture(0, cv2.CAP_V4L2)

生成信息可以通过

代码语言:javascript
运行
复制
print(cv2.getBuildInformation())
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73789013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档