OpenCV 是计算机视觉领域最流行的库之一。假设你已经完成了环境安装,下面直接切入核心功能,聊聊如何用 Python 调用摄像头、播放本地视频以及录制视频。
1. 利用 OpenCV 打开摄像头
要启动摄像头,核心是创建 VideoCapture 对象。参数 0 代表默认摄像头编号,如果电脑连接了多个设备,可以尝试传入 1 或更高数字来切换。
import cv2
capture = cv2.VideoCapture(0)
while True:
# read() 返回两个值:ret 和 frame
# ret 是布尔值,表示帧是否成功获取
ret, frame = capture.read()
if not ret:
break
# 显示图像窗口,第一个参数是窗口标题
cv2.imshow('frame', frame)
# 等待按键,1ms 后刷新,按 'q' 退出
if cv2.waitKey(1) == ord('q'):
break
capture.release()
cv2.destroyAllWindows()
关于灰度图: 如果想看黑白画面,只需在显示前加一步颜色转换。cv2.cvtColor() 负责将 BGR 转为 Gray(灰度)。
# ... 上面代码保持不变 ...
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame', gray) # 这里显示灰度图
# ... 后续逻辑不变 ...
属性控制: 除了读取,还能通过 get() 和 set() 调整摄像头参数,比如分辨率、亮度等。propId 对应不同的属性 ID(0~18),具体数值可查阅官方文档。
capture = cv2.VideoCapture(0)
# 获取当前宽度和高度
width = int(capture.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(capture.get(cv2.CAP_PROP_FRAME_HEIGHT))
print(f"当前分辨率:{width}x{height}")
# 尝试设置分辨率(注意:并非所有摄像头都支持自定义分辨率)
# capture.set(cv2.CAP_PROP_FRAME_WIDTH, width * 2)
# capture.set(cv2.CAP_PROP_FRAME_HEIGHT, height * 2)
2. 播放本地视频
播放本地文件与调用摄像头的 API 几乎一致,区别在于初始化时传入的是文件路径而非数字索引。
import cv2
video_path = "./test_video.mp4"
capture = cv2.VideoCapture(video_path)
while capture.isOpened():
ret, frame = capture.read()
if not ret:
break
cv2.imshow("Video", frame)
# waitKey 参数决定播放速度,单位毫秒
# 30ms 约等于每秒 33 帧,可根据需求调整
if cv2.waitKey(30) == ord('q'):
break
capture.release()
cv2.destroyAllWindows()
3. 录制视频
保存视频需要用到 VideoWriter 对象。初始化时需要指定四个关键参数:输出文件名、编码格式、帧率(FPS)和分辨率。
FourCC 编码: 用于指定视频压缩方式。常见的如 MJPG,写法可以是 cv2.VideoWriter_fourcc(*'MJPG') 或逐个字符传入。
import cv2
capture = cv2.VideoCapture(0)
# 定义编码格式
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
# 创建写入对象:文件名,编码,帧率,尺寸
outfile = cv2.VideoWriter("output.avi", fourcc, 25.0, (640, 480))
while capture.isOpened():
ret, frame = capture.read()
if ret:
outfile.write(frame) # 写入每一帧
cv2.imshow('Recording', frame)
if cv2.waitKey(1) == ord('q'):
break
else:
break
capture.release()
outfile.release()
cv2.destroyAllWindows()
总结
- 采集与播放:统一使用
cv2.VideoCapture(),参数为数字即摄像头,为路径即本地视频。 - 属性调节:通过
cap.get()读取状态,cap.set()修改配置。 - 视频写入:使用
cv2.VideoWriter()配合合适的 FourCC 编码实现录制。
掌握这些基础接口,就能快速搭建起图像采集与处理的流程框架。
