kinect-kinectv1彩色相机和深度相机的内参标定(camera_calibration)

说明

使用camera_calibration标定包对kinectv1彩色相机和深度相机的内参进行标定

一、标定板

下载链接
说明:标定板为8x6,可以用A4纸打印出来,square边长为24.5mm,即0.0245m,作为标定输入参数。黑板棋盘版的点从里面的点开始数。

二、打开相机和标定程序

roslaunch freenect_launch freenect.launch打开相机(kinect驱动的安装见博客 kinect-v1版的环境配置和使用
rostopic list列出话题

三、打开标定包(标定彩色相机)

rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.0245 image:=/camera/rgb/image_raw camera:=/camera/rgb

注意:camera:=/camera/rgb一定要输入,不然后面保存不了,当然要改成自己的话题
注意:8x6中间的乘是字母x
注意
x:表示标定板在视野中的左右位置,左右移动使绿色条变满
y:表示标定板在视野中的前后的位置,前后移动使绿色条变满
size:标定板在占视野的尺寸大小,也可以理解为标定板离摄像头的远近,上下移动使绿色条变满
skew:标定板在视野中的倾斜位置,不断旋转标定板使绿色条变满
注意
CALIBRATE被激活后,点击CALIBRATE按钮,稍等1-2分钟,SAVE按钮和COMMIT按钮被激活,点击save校准数据会被保存到/temp文件夹下;点击COMMIT将结果保存到/home/.ros/camera_info/head_camera.yaml

四、标定深度相机

rosrun camera_calibration cameracalibrator.py image:=/camera/ir/image_raw camera:=/camera/ir --size 8x6 --square 0.024
注意:深度相机标定的时候尽量在暗处,遮光最好,用不透光的物品把红外发射装置遮住。

五、结果

image_width: 640
image_height: 480
camera_name: rgb_A22593W01131223A
camera_matrix:      **//相机矩阵,即内参矩阵**
  rows: 3
  cols: 3
  data: [576.2010093732916, 0, 333.7638119169971, 0, 575.8066271149149, 239.9059593076319, 0, 0, 1]
distortion_model: plumb_bob
distortion_coefficients:  **//畸变系数**
  rows: 1
  cols: 5
  data: [0.1076528441484293, -0.1213037606263155, 0.0003280501169193647, 0.005797686900416189, 0]
rectification_matrix:
  rows: 3
  cols: 3
  data: [1, 0, 0, 0, 1, 0, 0, 0, 1]
projection_matrix:    **//投影矩阵,即相机坐标系到图像坐标系转换的矩阵**
  rows: 3
  cols: 4
  data: [589.6998291015625, 0, 337.1583730036364, 0, 0, 592.9710083007812, 240.0480758415888, 0, 0, 0, 1, 0]
  • 8
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 17
    评论
好的,以下是C++编写的ROS程序,用于读取Kinect深度相机的深度图像和RGB图像,并将它们存储到指定的文件路径中。 ```cpp #include <ros/ros.h> #include <sensor_msgs/Image.h> #include <cv_bridge/cv_bridge.h> #include <opencv2/highgui/highgui.hpp> void depthCallback(const sensor_msgs::ImageConstPtr& msg) { // Convert ROS image message to OpenCV Mat cv_bridge::CvImagePtr cv_ptr; try { cv_ptr = cv_bridge::toCvCopy(msg, sensor_msgs::image_encodings::TYPE_32FC1); } catch (cv_bridge::Exception& e) { ROS_ERROR("cv_bridge exception: %s", e.what()); return; } // Save depth image to file cv::Mat depth_image = cv_ptr->image; cv::imwrite("/home/hudi/my_pic/town2/depth/video1", depth_image); } void rgbCallback(const sensor_msgs::ImageConstPtr& msg) { // Convert ROS image message to OpenCV Mat cv_bridge::CvImagePtr cv_ptr; try { cv_ptr = cv_bridge::toCvCopy(msg, sensor_msgs::image_encodings::BGR8); } catch (cv_bridge::Exception& e) { ROS_ERROR("cv_bridge exception: %s", e.what()); return; } // Save RGB image to file cv::Mat rgb_image = cv_ptr->image; cv::imwrite("/home/hudi/my_pic/town2/rgb/video1", rgb_image); } int main(int argc, char** argv) { ros::init(argc, argv, "kinect_subscriber"); ros::NodeHandle nh; // Subscribe to depth and RGB image topics ros::Subscriber depth_sub = nh.subscribe("/camera3/depth/image_raw", 1, depthCallback); ros::Subscriber rgb_sub = nh.subscribe("/camera3/rgb/image_raw", 1, rgbCallback); ros::spin(); return 0; } ``` 这段程序与之前的程序类似,只需更改程序名称和话题名称。程序假设深度图像是32位浮点型,RGB图像是BGR8格式。如果你的相机数据类型不同,请相应地更改代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

这是一个图像

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

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

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

打赏作者

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

抵扣说明:

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

余额充值