4 · 摄像头属性设置
⚙️ 通过 cv2.CAP_PROP_* 属性精细控制摄像头:分辨率、帧率、亮度、对比度…… 让画面完全符合你的预期。
4.1 cv2.CAP_PROP_* 属性详解
OpenCV 为摄像头定义了大量属性标识符,以 cv2.CAP_PROP_ 开头。下表列出最常用的属性:
| 属性标识 | 数值 | 说明 |
|---|---|---|
CAP_PROP_FRAME_WIDTH | 3 | 画面宽度(像素) |
CAP_PROP_FRAME_HEIGHT | 4 | 画面高度(像素) |
CAP_PROP_FPS | 5 | 帧率(每秒帧数) |
CAP_PROP_BRIGHTNESS | 10 | 亮度(相机支持时有效) |
CAP_PROP_CONTRAST | 11 | 对比度 |
CAP_PROP_SATURATION | 12 | 饱和度 |
CAP_PROP_HUE | 13 | 色调 |
CAP_PROP_GAIN | 14 | 增益 |
CAP_PROP_EXPOSURE | 15 | 曝光时间 |
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)}')
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}')
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}')
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()