corner_avg.py

原理

该方案对相邻两帧图像进行absdiff之后,寻找角点并计算平均坐标。通过跟踪平均坐标的移动判断物体移动方向。该方案程序已经完善,可以输出到csv文件,稳定性较好。

参数解释

  • capture_src = 0

    视频源。输入0来使用内置相机,输入文件路径来指向文件。默认0

  • is_flipped = True

    是否左右镜像图像。当以内置相机为源时建议打开。

  • number_feature_point = 75

    diff图像上寻找的最优角点数量。数量越多数据越稳定,但会极大地降低性能。

  • move_threshold = 1

    静止状态判断阈值。当平均像素差值低于此阈值时,判断为没有任何动作,也不进行角点寻找。

  • overflow_threshold = 20

    场景切换判断阈值。当平均像素差值高于此阈值时,判断为场景切换或镜头大幅移动,也不进行角点寻找。

  • idle_status_threshold = 0.2

    状态历史数据投票静止状态判断阈值。投票数据高于该阈值判断为移动,反之判断为静止。

  • status_history_depth = 3

    状态历史数据深度。决定用于投票而保留的历史数据数量。

  • frame_interval = 10

    每次处理完之后等待的时常(单位:ms)。不能设置为0,否则程序将无法正常工作。

  • export_as_csv = False

    是否导出到csv文件。

  • csv_filename = "sample.csv"

    csv文件名。

CSV格式

列名 解释
frame 帧计数
l1_diff_sum 平均每像素差值
l1_has_corners 是否寻找到角点
l1_avg_x 角点平均x轴坐标
l1_avg_y 角点平均y轴坐标
l2_motion_state 使用阈值判断平均每像素差值后得出的运动状态(-1=静止,0=正常移动,1=镜头移动/场景切换)
l2_delta_x 角点平均x轴坐标差值
l2_delta_y 角点平均y轴坐标差值
l3_result 投票统计后得出的运动方向

diff_moment.py

原理

计算diff图像重心,再跟踪重心移动判断运动方向。程序大致完善,不支持输出csv,数据稳定性一般。

optical_flow.py

原理

计算diff图像,再使用光流跟踪。不稳定,需要进一步完善。