ROS实战(三)|相机标定

最近的小车需要用到ROS,学习的过程做个记录。

今天写的主要是使用opencv进行相机标定(Camera Calibration)的步骤。

下载opencv源码

这里用到的源码版本是opencv3.2.0,操作环境是Ubuntu 18.04 LTS。

1
2
wget https://github.com/opencv/opencv/archive/refs/tags/3.2.0.tar.gz
tar -xvf 3.2.0.tar.gz

使用已有的图片进行标定

编译camera_calibration.cpp

进入指定目录
1
2
cd opencv-3.2.0
cd samples/cpp/tutorial_code/calib3d/camera_calibration
创建CMakeList.txt文件
1
vim CMakeLists.txt

复制下列代码到文件.

1
2
3
4
5
cmake_minimum_required(VERSION 2.8)
find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable( camera_calibration camera_calibration.cpp )
target_link_libraries( camera_calibration ${OpenCV_LIBS} )
编译
1
2
3
4
mkdir build 
cd build
cmake ..
make

修改参数

编辑同级目录下的in_VID5.xml文件,根据标定靶的行数和列数来修改参数。这里的使用的标定靶一共有6行,每一行有8个内部角点。

其中VID5.xml存放的是标定图片路径,一般图片应不少于3张,图片越多标定效果越好。

标定
1
2
mv build/camera_calibration .
./camera_calibration ./in_VID5.xml

生成的out_camera_data.xml就是标定后得到的参数文件。

使用视频对摄像头进行标定

编译calibration.cpp

进入指定目录
1
2
3
4
cd opencv-3.4.3
mkdir -p ../calibration_ws
cp samples/cpp/calibration.cpp ../calibration_ws
cd ../calibration_ws
创建CMakeLists.txt文件
1
2
3
4
5
cmake_minimum_required(VERSION 2.8)
find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable( calibration calibration.cpp )
target_link_libraries( calibration ${OpenCV_LIBS} )
编译
1
2
3
4
mkdir build
cd build
cmake ..
make

标定
1
2
chmod +x calibration
./calibration -w=8 -h=6

这里的h指的是标定靶一共有6行,w指的是每一行有8个内部角点。

按g键开始标定。

标定完毕。