标定Camera number:0
step1:采集标定板图像4张,命名为left01~04

运行后得到以下四张图像:

附采集图像的代码:

#include<opencv2\opencv.hpp>
#include<iostream>
#include<string>using namespace std;
using namespace cv;int main()
{int i = 1;VideoCapture video;video.open(0);if (!video.isOpened()){cout << "请检查视频文件" << endl;return -1;}cout << "视频帧率=" << video.get(CAP_PROP_FPS) << endl;cout << "视频宽度=" << video.get(CAP_PROP_FRAME_WIDTH) << endl;while (1){Mat frame;video >> frame;if (frame.empty()){break;}imshow("video", frame);uchar c = waitKey(1000 / video.get(CAP_PROP_FPS));//视频播放速度if (c == 'q'){break; //按q键退出程序}if (c == 'w'){imwrite("D:/opencv/learnOpenCV/learnOpenCV/left0"+to_string(i)+".jpg", frame);//图像保存i = i + 1;}}return 0;
}

step2:文件准备

step3:标定程序准备

运行标定程序:(GIF动图)

标定结果:


附标定代码:

#include <opencv2\opencv.hpp>
#include <fstream>
#include <iostream>
#include <vector>
#include <string>using namespace std;
using namespace cv;int main()
{//读取所有图像vector<Mat> imgs;string imageName;ifstream fin("calibdata.txt");while (getline(fin, imageName)){Mat img = imread(imageName);imgs.push_back(img);}Size board_size = Size(6, 8);  //方格标定板内角点数目(行,列)vector<vector<Point2f>> imgsPoints;for (int i = 0; i < imgs.size(); i++){Mat img1 = imgs[i];Mat gray1;cvtColor(img1, gray1, COLOR_BGR2GRAY);vector<Point2f> img1_points;findChessboardCorners(gray1, board_size, img1_points);  //计算方格标定板角点find4QuadCornerSubpix(gray1, img1_points, Size(1, 1));  //细化方格标定板角点坐标bool pattern = true;drawChessboardCorners(img1, board_size, img1_points, pattern);imshow("img1", img1);imwrite("img" + to_string(i) + ".jpg", img1);waitKey(0);imgsPoints.push_back(img1_points);}//生成棋盘格每个内角点的空间三维坐标Size squareSize = Size(2.48, 2.48);  //棋盘格每个方格的真实尺寸vector<vector<Point3f>> objectPoints;for (int i = 0; i < imgsPoints.size(); i++){vector<Point3f> tempPointSet;for (int j = 0; j < board_size.height; j++){for (int k = 0; k < board_size.width; k++){Point3f realPoint;// 假设标定板为世界坐标系的z平面,即z=0realPoint.x = j*squareSize.width;realPoint.y = k*squareSize.height;realPoint.z = 0;tempPointSet.push_back(realPoint);}}objectPoints.push_back(tempPointSet);}/* 初始化每幅图像中的角点数量,假定每幅图像中都可以看到完整的标定板 */vector<int> point_number;for (int i = 0; i<imgsPoints.size(); i++){point_number.push_back(board_size.width*board_size.height);}//图像尺寸Size imageSize;imageSize.width = imgs[0].cols;imageSize.height = imgs[0].rows;Mat cameraMatrix = Mat(3, 3, CV_32FC1, Scalar::all(0));  //摄像机内参数矩阵Mat distCoeffs = Mat(1, 5, CV_32FC1, Scalar::all(0));  //摄像机的5个畸变系数:k1,k2,p1,p2,k3vector<Mat> rvecs;  //每幅图像的旋转向量vector<Mat> tvecs;  //每张图像的平移量calibrateCamera(objectPoints, imgsPoints, imageSize, cameraMatrix, distCoeffs, rvecs, tvecs, 0);cout << "相机的内参矩阵=" << endl << cameraMatrix << endl;cout << "相机畸变系数" << distCoeffs << endl;waitKey(0);return 0;
}

视觉SLAM——英特尔D435i相机内参矩阵标定相关推荐

  1. 视觉SLAM——英特尔D435i双目相机外参标定

    标定Camera number:0 step1:使用左右相机同时采集标定板图像各4张,命名为left0104和right0104 附左右相机同时采集标定板图像的代码: #include <ios ...

  2. 视觉SLAM笔记(2) 相机

    视觉SLAM笔记(2) 相机 1. 相机分类 2. 单目相机 3. 双目相机 4. 深度相机 1. 相机分类 在 SLAM 中,非常强调未知环境 在理论上,没法限制"小萝卜"的使用 ...

  3. 深蓝视觉SLAM课程第四讲--相机模型,非线性优化(G2O)

    课程Github地址:https://github.com/wrk666/VSLAM-Course/tree/master 0. 内容 对应于十四讲中的第5讲和第6讲 回顾十四讲P24-26 1. 针 ...

  4. OA-SLAM:在视觉SLAM中利用对象进行相机重新定位

    作者 | 鱼肖浓  编辑 | 汽车人 原文链接:https://zhuanlan.zhihu.com/p/587010197 点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷 ...

  5. 视觉SLAM(二):相机与图像

    目录 1. 三维刚体运动 1.1. 问题阐述 1.2. 变换矩阵 标准正交基法 旋转向量法 2. 相机模型 2.1. 针孔模型 2.2. 畸变模型 2.3. 根据GNSS与IMU求像素坐标 从 世界坐 ...

  6. 英特尔深度相机- Python 包装器的示例代码

    这些示例演示了如何使用 SDK 的 python 包装器. 设备:RealSense D435i相机 代码链接:https://github.com/IntelRealSense/librealsen ...

  7. 相机内参矩阵K和fov的相互转换

    1.理论知识 fov  f  height之间关系 从图可以很直观的看出fov_y 焦距f和图像高之间的关系,tan(fov_y/2) = 2/h / fy.所以正反向的转换过程就很直接.f以pixe ...

  8. 视觉SLAM总结,PNP:利用3D-2D点估计相机运动

    目录 简介 直接线性变换 P3P 非线性优化:最小化重投影误差求解PNP 代码实现 简介 PNP(Perspective-n-Point)描述了当知道n个3D空间点及其投影位置时(2D),如何估计相机 ...

  9. 视觉SLAM十四讲学习笔记-第四讲---第五讲学习笔记总结---李群和李代数、相机

    第四讲---第五讲学习笔记如下: 视觉SLAM十四讲学习笔记-第四讲-李群与李代数基础和定义.指数和对数映射_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第四讲-李代数求导与扰动模 ...

最新文章

  1. 作为程序员,你评估工作量留 buffer 吗?
  2. VTK:图片之Flip
  3. hoj 13788 Dwarves
  4. 数字图像与数字图像处理
  5. 做一个好的搜索引擎有多难
  6. vue设置输入框输入长度_Vue实现input宽度随文字长度自适应操作
  7. 新手程序员不知道的小技巧!
  8. 信安教程第二版-第24章工控安全需求分析与安全保护工程
  9. python ca模块_python学习之模块-模块(五)
  10. Jmeter如何将上一个请求的结果作为下一个请求的参数——使用正则表达式提取器转载...
  11. BASE64Encoder
  12. 定时器和for循环数组_59.for循环遍历数组、集合(含代码)
  13. QT学习之路:从入门到精通
  14. count计时器java,倒计时器CountDownLatch
  15. 我爱 Ruby 的三十七个理由
  16. 智能客服机器人+在线客服,让你的服务不间断
  17. 大数据周周看:汽车之家发布大数据产品“车智云”,中国数据中心标准联盟正式在京成立
  18. app注册协议做法和注意事项
  19. 从聚焦沉淀到探索创新,跨境支付正在酝酿下一个行业浪潮
  20. 技术VS管理,哪个更重要?

热门文章

  1. Controller接口控制器(5)
  2. mysql 创建删除表_mysql创建删除表的的详细解析
  3. 基于JAVA+SpringBoot+Mybatis+MYSQL的汽车租赁管理系统
  4. HTML5 原生混合模式,html5 – Chrome中的Chrome css3混合混合模式错误
  5. php 判断 跳转url参数,怎么通过链接获取跳转后的url参数
  6. 2017-2018-2 20155315《网络对抗技术》Exp3:免杀原理与实践
  7. POJ 2777 ZOJ 1610 HDU 1698 --线段树--区间更新
  8. [编程之美]饮料供货
  9. 倒数58天 -- 分治法 -- 使用循环求方程的一个解
  10. fmin在Matlab中,MATLAB-fminsearch函数的使用