You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用OpenCV2无法设置摄像头视频分辨率,请求尺寸已确认可用

问题:OpenCV调用摄像头无法设置高分辨率,树莓派正常但笔记本失效

使用OpenCV2调用摄像头时只能捕获小尺寸图像,但通过Cheese和命令行工具uvcdynctrl可以确认摄像头支持更高分辨率。以下代码在树莓派上可正常运行,但在笔记本上失效:

import cv2
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
print(width, height)
# 输出:176.0 144.0

uvcdynctrl工具输出的摄像头支持格式及分辨率如下:

(base) ~/code/CaptureQueen$ uvcdynctrl -f
Listing available frame formats for device video0:
Pixel format: MJPG (Motion-JPEG; MIME type: image/jpeg)
  Frame size: 160x120
    Frame rates: 30, 25, 20, 15, 10, 5
  Frame size: 176x144
    Frame rates: 30, 25, 20, 15, 10, 5
  Frame size: 320x240
    Frame rates: 30, 25, 20, 15, 10, 5
  Frame size: 352x288
    Frame rates: 30, 25, 20, 15, 10, 5
  Frame size: 640x480
    Frame rates: 30, 25, 20, 15, 10, 5
  Frame size: 800x600
    Frame rates: 15, 10, 5
Pixel format: YUYV (YUYV 4:2:2; MIME type: video/x-raw-yuv)
  Frame size: 160x120
    Frame rates: 15, 10, 5
  Frame size: 176x144
    Frame rates: 15, 10, 5

解决方案

  • 切换摄像头像素格式为MJPG:从uvcdynctrl输出可以看到,YUYV格式仅支持低分辨率,而MJPG格式支持640x480等高分辨率。OpenCV默认可能采用了YUYV格式,导致无法设置高分辨率。
  • 修改后的代码:
import cv2
cap = cv2.VideoCapture(0)
# 设置像素格式为MJPG
cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'))
# 设置分辨率
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
# 验证设置结果
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
print(width, height)

原因说明

笔记本的摄像头驱动在OpenCV默认的YUYV格式下仅提供低分辨率选项,切换到MJPG格式后才能访问摄像头支持的高分辨率模式。树莓派的摄像头驱动对格式的处理逻辑不同,因此默认代码即可正常工作。

内容的提问来源于stack exchange,提问作者user1859871

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 22:25:17