Xavier上使用OpenCV GPU模块对鱼眼相机进行矫正

Xavier上使用OpenCV GPU模块对鱼眼相机进行矫正

1. 安装cuda支持的opencv版本

由于xavier上使用jetpack刷机的opencv是不支持cuda加速的,所以我们需要重新安装支持cuda的opencv版本.

# 下载安装脚本
git clone https://github.com/jetsonhacks/buildOpenCVXavier.git
# 直接使用脚本下载源码并安装
cd buildOpenCVXavier
# <source directory> --> 安装过程中生成的中间文件保存路径, 默认为$HOME目录
# <install directory> --> opencv安装目录,默认为/usr/local目录
# 由于xavier空间不是很多,并且不好联网,所以建议提前将源码下载下来,放到固态硬盘里,然后将固态硬盘挂在到xavier上,并且设置<source directory>为硬盘目录,即在固态硬盘中保存编译过程中生产的中间文件
./buildOpenCV.sh -s <source directory> -i <install directory>

2. 重新编译vision_opencv软件包

当我们使用ROS工程接受图片数据时,需要i用到cv_bridge库,但是该库默认是不支持cuda加速的,所以我们在编译最终的相机矫正工程时,会出现如下警告信息:

在这里插入图片描述

该警告信息不影响编译,但是在我们运行程序时,会报如下错误:

在这里插入图片描述

虽然我们在CMakeLists文件中指定了链接的opencv路径为我们编译的opencv-3.4.3版本,但是程序还是会链接ROS中自带的libcv_bridge.so库,而这个库模式是基于opencv3.2生成的

所以我们需要基于我们自己安装的opencv-3.4.3重新编译vision_opencv模块:

# 创建工作空间
mkdir -p catkin_ws/src
# 下载vision_opencv
git clone https://github.com/ros-perception/vision_opencv.git
# 切换为melodic版本
cd vision_opecnv
git checkout melodic
cd ../
# 下载image_pipeline
git clone https://github.com/ros-perception/image_pipeline.git
# 切换为melodic版本
cd image_pipeline
git checkout melodic
# 安装
# 如果提示没有catkin命令,可通过如下方式安装
# sudo apt-get install python-catkin-tools
catkin build

在这里插入图片描述

我们可以看到,编译完成后,会在catkin_ws/install目录下生成编译结果文件

3. 将编译结果替换到ROS环境下

cd ~/catkin_ws/install
sudo cp -r * /opt/ros/melodic
# 在/etc/ld.so.conf.d/下创建opencv.conf文件,并输入(/usr/local/lib)
sudo echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf
sudo ldconfig

4. 重新编译相机矫正程序

# 先删除之前编译生成的文件
cd camera_corrected_ws
rm -rf build devel
# 添加新编译的vision_opencv模块到环境变量,不执行这个操作,我们链接的lib_cvbridge.so库还是以前的
# source ~/catkin_ws/install/setup.bash
# 编译
catkin_make
# 运行程序
source devel/setup.bash
roslaunch camera_corrected camera_corrected.launch

相机矫正程序核心代码:

cv::Mat map1, map2;
cv::fisheye::initUndistortRectifyMap(camera_mat_, camera_dist_coeff_mat_, cv::Mat(), camera_mat_, cv::Size(1280, 720), CV_32FC1, map1, map2);

m_mapx = cv::cuda::GpuMat(map1);
m_mapy = cv::cuda::GpuMat(map2);

cv::Mat src_cpu = cv_ptr->image;
cv::cuda::GpuMat src(src_cpu.size(), CV_8UC4);
src.upload(src_cpu);
cv::cuda::GpuMat distortion(src_cpu.size(), CV_8UC4);
cv::Mat result;

cv::cuda::remap(src, distortion, m_mapx, m_mapy, cv::INTER_LINEAR);
distortion.download(result);

5. 矫正结果

在这里插入图片描述
在这里插入图片描述

我们可以看到,矫正后的图像输出最大能达到57HZ左右,即矫正耗时在18ms左右

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值