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

Python实现每秒保存实时视频中物体距离测量结果

实时视频距离测量与每秒记录方案(Python实现)

刚好做过类似的需求,给你一套直接能用的Python解决方案,结合OpenCV处理视频、time模块控制计时,完美实现每秒把时间和距离写入文本文件的需求。

整体实现思路

  • 用OpenCV捕获实时视频流(摄像头/本地视频文件均可)
  • 内置精准计时逻辑,确保每秒执行一次距离测量与文件写入
  • 以追加模式写入文本文件,每次写入一行时间+距离的对应数据
  • 预留距离测量的自定义接口,你可以直接对接自己的物体检测/距离计算代码

完整代码示例

import cv2
import time

def measure_distance(frame):
    """
    这里替换成你自己的距离测量逻辑
    参数:当前视频帧frame
    返回:实际测量的距离值(比如厘米/米)
    示例:假设你已经通过目标检测得到两个物体的坐标(x1,y1)和(x2,y2),计算像素距离后转实际距离
    """
    # 临时模拟距离数据,实际使用时替换成你的测量代码
    import random
    return random.randint(1, 10)

def main():
    # 初始化视频捕获(0表示默认摄像头,也可以替换成视频文件路径)
    cap = cv2.VideoCapture(0)
    if not cap.isOpened():
        print("无法打开视频流!")
        return
    
    # 初始化计时变量和输出文件
    last_write_time = time.time()
    current_second = 1  # 从第1秒开始计数
    output_file = open("distance_records.txt", "w")
    # 写入表头
    output_file.write("Time,Distance\n")
    output_file.flush()  # 强制写入磁盘,避免缓存丢失
    
    print("开始记录,按Q键退出...")
    
    while True:
        ret, frame = cap.read()
        if not ret:
            print("视频流结束或读取失败!")
            break
        
        # 显示视频窗口(可选,方便调试查看)
        cv2.imshow("Real-time Video", frame)
        
        # 检查是否到了每秒写入的时间点
        current_time = time.time()
        if current_time - last_write_time >= 1.0:
            # 测量当前帧的距离
            distance = measure_distance(frame)
            # 写入数据:累计秒数 + 距离值
            output_line = f"{current_second},{distance}\n"
            output_file.write(output_line)
            output_file.flush()  # 立即写入磁盘,防止程序意外退出丢失数据
            
            print(f"已记录:第{current_second}秒,距离={distance}")
            
            # 更新计时变量
            last_write_time = current_time
            current_second += 1
        
        # 按Q键退出程序
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    
    # 释放所有资源
    cap.release()
    cv2.destroyAllWindows()
    output_file.close()
    print("记录结束,文件已保存为distance_records.txt")

if __name__ == "__main__":
    main()

关键细节说明

  1. 计时准确性:用time.time()计算时间差,确保每秒触发一次写入,比固定循环延迟更可靠(避免视频处理耗时影响计时精度)
  2. 文件写入优化:
    • 初始用w模式创建文件并写入表头,后续用flush()强制写入磁盘,防止程序意外退出时数据丢失
    • 每行数据用逗号分隔,方便后续用Excel、Pandas直接打开分析
  3. 距离测量接口:measure_distance(frame)是核心自定义函数,你需要把自己的物体检测(比如YOLO、OpenCV轮廓检测)和距离计算逻辑放进去。比如通过两个物体的像素坐标,结合摄像头焦距、实际物体尺寸等参数转换为真实物理距离。
  4. 稳定性处理:代码包含了视频流打开失败、读取失败的判断,确保程序在异常场景下能优雅退出。

输出文件格式示例

运行后生成的distance_records.txt内容完全符合你的需求:

Time,Distance
1,7
2,4
3,8
4,2
5,3
6,1
...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:37:08