4 · 摄像头属性设置

⚙️ 通过 cv2.CAP_PROP_* 属性精细控制摄像头:分辨率、帧率、亮度、对比度…… 让画面完全符合你的预期。

4.1 cv2.CAP_PROP_* 属性详解

OpenCV 为摄像头定义了大量属性标识符,以 cv2.CAP_PROP_ 开头。下表列出最常用的属性:

属性标识数值说明
CAP_PROP_FRAME_WIDTH3画面宽度(像素)
CAP_PROP_FRAME_HEIGHT4画面高度(像素)
CAP_PROP_FPS5帧率(每秒帧数)
CAP_PROP_BRIGHTNESS10亮度(相机支持时有效)
CAP_PROP_CONTRAST11对比度
CAP_PROP_SATURATION12饱和度
CAP_PROP_HUE13色调
CAP_PROP_GAIN14增益
CAP_PROP_EXPOSURE15曝光时间
cv2.CAP_PROP_* 属性族 🔹 几何属性:WIDTH, HEIGHT 🔹 性能属性:FPS, FOURCC, BUFFERSIZE 🔹 图像调节:BRIGHTNESS, CONTRAST, SATURATION 🔹 相机控制:EXPOSURE, GAIN, HUE

4.2 设置分辨率

使用 cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280) 和 cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720) 即可指定宽高。注意:摄像头可能不支持所有分辨率,设置后建议读取实际值确认。

import cv2

cap = cv2.VideoCapture(0)
# 设置分辨率为 1280x720
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)

# 验证实际分辨率
w = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
h = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
print(f'实际分辨率: {int(w)} x {int(h)}')
WIDTH 设置 HEIGHT 设置 →

4.3 设置帧率

通过 cap.set(cv2.CAP_PROP_FPS, 30) 请求帧率。实际帧率受摄像头能力、带宽、分辨率影响。可用 cap.get(cv2.CAP_PROP_FPS) 读取。

cap.set(cv2.CAP_PROP_FPS, 60)      # 尝试设置 60 FPS
fps = cap.get(cv2.CAP_PROP_FPS)
print(f'当前帧率: {fps}')
FPS 设置目标帧率 → 实际帧率受驱动限制 常用值:15, 30, 60

4.4 设置亮度 & 对比度

亮度 CAP_PROP_BRIGHTNESS 和对比度 CAP_PROP_CONTRAST 通常取值范围 0~255,但具体依赖摄像头驱动。设置前建议先获取范围。

# 设置亮度 (示例值 100)
cap.set(cv2.CAP_PROP_BRIGHTNESS, 100)
bright = cap.get(cv2.CAP_PROP_BRIGHTNESS)
print(f'亮度: {bright}')

# 设置对比度 (示例值 50)
cap.set(cv2.CAP_PROP_CONTRAST, 50)
contrast = cap.get(cv2.CAP_PROP_CONTRAST)
print(f'对比度: {contrast}')
🌞 亮度 0~255 🌓 对比度 0~255 实际效果取决于摄像头硬件支持

4.5 综合属性设置片段

以下代码演示一次性设置多个属性,并打印实际生效值:

import cv2

cap = cv2.VideoCapture(0)
# 批量设置
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)
cap.set(cv2.CAP_PROP_FPS, 30)
cap.set(cv2.CAP_PROP_BRIGHTNESS, 120)
cap.set(cv2.CAP_PROP_CONTRAST, 60)

# 读取实际值
props = {
    '宽度': cv2.CAP_PROP_FRAME_WIDTH,
    '高度': cv2.CAP_PROP_FRAME_HEIGHT,
    '帧率': cv2.CAP_PROP_FPS,
    '亮度': cv2.CAP_PROP_BRIGHTNESS,
    '对比度': cv2.CAP_PROP_CONTRAST,
}
for name, prop_id in props.items():
    val = cap.get(prop_id)
    print(f'{name}: {val}')

cap.release()
cap.set() → 驱动层协商 → 实际参数 cap.get() 验证