光流处理示例
光流处理示例使用了 hbVPPyrDown, hbVPCornerHarris 和 hbVPOpticalFlowPyrLK 接口,展示了如何对连续帧图像进行光流追踪,详细的实现方法请结合示例源码对比实践。
功能概述

该示例实现的功能是对连续帧的图像输入进行特征点跟踪,输入图像是NV12类型,转成gray类型后使用 hbVPPyrDown 生成5层金字塔图层。
第一帧使用 hbVPCornerHarris 生成harris角点,后续帧会使用 hbVPOpticalFlowPyrLK 对第一帧生成的角点进行跟踪,每隔5帧会再次调用 hbVPCornerHarris 生成先验特征点用于校准跟踪结果。
该示例的代码过程可以大致分为以下四个步骤,详细的实现请结合示例源码。
-
分配输入图像和输入输出特征点的内存。
-
准备光流计算参数。
-
依次执行每一帧的计算,包括生成金字塔图层,角点检测和光流追踪。
-
释放内存资源。
运行指南
光流处理示例执行脚本位于 ucp_tutorial/vp/vp_samples/script/04_optical_flow 目录下,包含以下脚本:
run_optical_flow.sh脚本中命令行内容如下:
命令行参数含义如下:
- $ {bin} :编译好的可执行文件。
- image_file_list:输入图像列表。
- frame_num:运行的帧数,可根据实际需求调整计算的帧数。
- harris_top_k:用于筛选前top k角点计算结果,可自行调整。
使用的时候,进入 vp_samples/script/04_optical_flow 目录,然后直接执行run_optical_flow.sh即可,执行方法及日志输出如下:
结果说明
示例运行结束后会在 vp_samples/script/04_optical_flow 目录下生成可视化图像,本示例的生成物内容如下:
其中蓝色点为前一帧图像的特征点,红色点为当前帧图像的特征点,绿色是光流轨迹。第一帧和第n帧的追踪效果如下所示:
注意
- 该示例的PyrDown和CornerHarris计算都是在DSP上进行处理的,请提前配置好DSP环境。
- 如需替换图片,请保证替换的输入图片为连续帧图像,否则光流计算的结果可能会不准确。


