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

能否用OpenCV实现低分辨率目标跟踪与高分辨率视频录制?

实现方案:单1080p摄像头同时低分辨率跟踪+指定分辨率录制

完全可以通过OpenCV实现需求,无需额外依赖库,核心思路是捕获摄像头的1080p原始帧,对帧进行缩放得到不同分辨率的版本,分别用于MOSSE跟踪和视频录制。以下是具体步骤和代码示例:

核心逻辑

树莓派的摄像头通常无法同时输出多分辨率数据流,因此我们先捕获最高分辨率(1080p)的帧,再通过OpenCV的缩放函数生成跟踪用的低分辨率帧(640x480)和录制用的目标分辨率帧(720x480/1280x720),分别处理即可。

具体实现步骤

1. 初始化摄像头与参数

先将摄像头设置为1080p输出,同时定义跟踪、录制用的分辨率,初始化视频写入器和MOSSE跟踪器。

2. 帧处理循环

  • 读取原始1080p帧
  • 缩放为640x480帧,用于MOSSE跟踪
  • 缩放为目标录制分辨率帧,写入视频文件
  • (可选)将跟踪框映射回原始帧显示

3. 资源释放

循环结束后释放摄像头、视频写入器和窗口资源。

完整代码示例

import cv2 as cv

# 初始化摄像头(树莓派上建议加CAP_V4L2参数以更好支持分辨率设置)
cap = cv.VideoCapture(0, cv.CAP_V4L2)
# 设置摄像头输出为1080p、30fps
cap.set(cv.CAP_PROP_FRAME_WIDTH, 1920)
cap.set(cv.CAP_PROP_FRAME_HEIGHT, 1080)
cap.set(cv.CAP_PROP_FPS, 30)

# 定义分辨率参数
track_res = (640, 480)  # 跟踪用低分辨率
# 录制用分辨率二选一
record_res = (1280, 720)
# record_res = (720, 480)

# 初始化视频写入器(MP4格式,25fps)
fourcc = cv.VideoWriter_fourcc(*'mp4v')
video_writer = cv.VideoWriter('recorded_video.mp4', fourcc, 25, record_res)

# 初始化MOSSE跟踪器,先读取一帧并缩放后选择跟踪目标
ret, raw_frame = cap.read()
track_frame_init = cv.resize(raw_frame, track_res, interpolation=cv.INTER_AREA)
# 手动框选跟踪目标
bbox = cv.selectROI("选择跟踪目标", track_frame_init, False)
tracker = cv.TrackerMOSSE_create()
tracker.init(track_frame_init, bbox)

while cap.isOpened():
    ret, raw_frame = cap.read()
    if not ret:
        break

    # 生成跟踪用低分辨率帧并执行跟踪
    track_frame = cv.resize(raw_frame, track_res, interpolation=cv.INTER_AREA)
    success, tracked_bbox = tracker.update(track_frame)

    # (可选)将跟踪框映射回原始帧并绘制
    if success:
        x, y, w, h = [int(v) for v in tracked_bbox]
        # 计算缩放比例,将跟踪框坐标映射到原始1080p帧
        scale_x = raw_frame.shape[1] / track_res[0]
        scale_y = raw_frame.shape[0] / track_res[1]
        orig_x, orig_y = int(x * scale_x), int(y * scale_y)
        orig_w, orig_h = int(w * scale_x), int(h * scale_y)
        cv.rectangle(raw_frame, (orig_x, orig_y), (orig_x+orig_w, orig_y+orig_h), (0,255,0), 2)

    # 生成录制用分辨率帧并写入视频
    record_frame = cv.resize(raw_frame, record_res, interpolation=cv.INTER_AREA)
    video_writer.write(record_frame)

    # 显示实时画面(按q退出)
    cv.imshow("跟踪与录制", raw_frame)
    if cv.waitKey(1) & 0xFF == ord('q'):
        break

# 释放所有资源
cap.release()
video_writer.release()
cv.destroyAllWindows()

性能优化建议(针对Pi3A+)

  • 启用OpenCV硬件加速:编译OpenCV时开启树莓派的MMAL/V4L2硬件加速支持,可大幅提升帧捕获和缩放速度,确保帧率稳定在25fps以上。
  • 简化处理流程:如果不需要显示原始帧,可跳过跟踪框映射步骤,减少计算量。
  • 调整插值方法:缩小帧时使用INTER_AREA插值(代码中已用),比其他插值方法更快且画质损失小。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 12:13:15