点击查看系列文章目录
在 deepstream 开发过程中,经常会遇到需要保存图片的情形,在原 SDK 中并无直接的示例或接口。NV 官方提供的保存图片有两种方式:
(1)通过 dsexample 插件,在插件中增加 opencv 的相关功能,实现图片保存。但该方法需要额外增加一个插件,使用起来比较笨重,无法灵活的在 pipeline 任意位置保存图片。而且在 deepstream-app 中,dsexample 插件位于 osd 之前,因此只能保存原图,无法保存带渲染结果的图片。
(2)deepstream-image-meta-test 示例中,实现的是保存检测框中的裁剪的图片,用到的是 nvds_obj_encode 相关的接口,即在第一个回调函数中将检测结果编码 nvds_obj_enc_process (ctx, &userData, ip_surf, obj_meta, frame_meta);在第二个回调函数中解码并保存图像,虽然可以修改为保存整张图片,但该方法需要进行两步操作,也没有足够的灵活。
本文实现的是通过对 gstbuffer 数据的解析,提取相关数据,用 opencv 进行保存,在一个回调函数中完成全部功能,这样的话可以在任意位置进行保存图片。