基于自己的双目标定参数来运行海思DPU模块

本文详细解析了海思DPU模块在双目摄像头校正中的应用,包括查找表的合成与转换、输入数据格式转换及关键宏定义的修改。作者分享了在4K到1080P分辨率调整过程中遇到的问题与思考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

海思sample DPU代码只是大概讲解了Rect和Match的api调用过程。可能有人还是对如何将自己标定出来的参数运行在DPU上比较茫然。基于此,本文把这个思路理清下,希望能有所帮助。

查找表的求得

在《结合sample代码来分析海思DPU模块运行原理》中有提到,我们标定完双目摄像头得到左右摄像头的内参和外参后,就可以调用initUndistortRectifyMap()来分别得到左、右摄像头在x和y方向上的映射表mapx和mapy。

拿到mapx和mapy后,要做的第一步就是将mapx和mapy合成一个表,其格式如下

 在python里面,就两句话就可以完成。

left_map = np.dstack((left_mapx, left_mapy))
。。。 。。。
right_map = np.dstack((right_mapx, right_mapy))

合成一个表后,第二步工作就是要使用海思提供的转换工具svp_dpu_tool_rect_2.0.exe(解压缩HiDPU_PC_V2.0.0.0.tgz)来将该查找表转换海思内部格式。 该公式在windows平台上运行,其运行命令如下示例所示。

svp_dpu_tool_rect_2.0.exe ./Input/1920x1080_RightMapF.dat ./Output/1920x1080_RightMapI.dat 1920 1080

第一个是输入参数,为我们标定的参数;第二个是输出,生成给海思使用的。后面两个参数为该查找表的分辨率。注意,目前海思最大只能支持1920x1080的查找表。

输入数据格式的转换 

在HI_MPI_DPU_RECT_SendFrame()中有对输入数据格及其分辨率式进行描述,如下所示。

分辨率最大只能支持到2048x2048。另外只支持YUV420SP/422SP以及YUV400的数据格式。如果视频实时测距的话,那么vpss的输出格式要相应进行设置;如果是图片文件,那么先要解码并转换成这3种格式。顺便吐槽一下,opencv没有bgr直接转yuv420sp或422sp或yuv400的操作。我是先转到YV12(I420),然后取Y planar存成yuv400。 大家如果有更好的办法,请告诉我。 

小结

完成上面两大步骤的准备后,后面就是理解sample code并对下面宏等地方进行相应修改。

#define SAMPLE_DPU_IN_WIDTH (1920)
#define SAMPLE_DPU_IN_HEIGHT (1080)
#define SAMPLE_DPU_DST_WIDTH (1920)
#define SAMPLE_DPU_DST_HEIGHT (1080)

如果想知道rect后的两张图片是否行对齐,可以调用接口HI_MPI_DPU_RECT_GetFrame()来一把获取左右校正后的图片,并调用SAMPLE_COMM_DPU_WriteFrame2File()来保存成文件。

最后要说明的是,因为我们摄像头参数是基于4k的,为了适应海思dpu需求,我先将4k的map resize成1080p,然后再执行后面的步骤,但是校正后的图片内容就有些乱了,更不要说对齐。 我个人觉得基于4k图片的map值本身就不能通过resize成1080p来校正。如果有人遇到类似问题,并解决掉,请指教。

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ltshan139

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值