机器视觉学习笔记(5)——基于OpenCV的单目摄像机标定

机器视觉学习笔记(5)——基于OpenCV的单目摄像机标定

标签(空格分隔): 机器视觉


本文CameraCalibrator类源代码来自于OpenCV2 计算机视觉编程手册(Robert Laganiere 著 张静 译)

强烈建议阅读机器视觉学习笔记(4)——单目摄像机标定参数说明之后再阅读本文

1.单目摄像机标定目的

单目摄像机标定的目的就是使摄像机实际状态无限接近理论推导的理想状态。单目摄像机标定最终将确定9个参数摄像机内参数有4个透镜畸变参数5个

2.单目摄像机标定流程

  • 制作标定板
  • 使用摄像机拍摄不同角度的标定板
  • 将照片放置于预设的文件夹中
  • 编写程序计算摄像机内参数和透镜畸变参数
  • 保存9个参数

3.关键源代码说明

3.1bool findChessboardCorners((InputArray image, Size patternSize, OutputArray corners)

Finds the positions of internal corners of the chessboard.
(寻找棋盘格标定板的角点)

  • 三个参数依次代表输入图像,角点数目,存储角点的变量
  • 检测到角点以后,常常需要用void drawChessboardCorners()函数将其画出来
  • 如果找到的角点数目和输入的角点数目相同,就会用彩色圆圈画出角点,否则只用红色圆圈画出角点

示例程序如下:

void test()
{
   
    vector<Point2f> imageCorners;
    Size boardSize(9, 6);
    Mat image = imread("left01.jpg");
    bool found = findChessboardCorners(image, boardSize, imageCorners);
    //绘制角点
    drawChessboardCorners(image, boardSize, imageCorners, found);
    namedWindow("test");
    imshow("test", image);//角点如未全部检测出来只是红色圆圈画出角点
    waitKey();
}

3.2Class CameraCalibrator

class CameraCalibrator{
   

	//输入点
    std::vector<std::vector<cv::Point3f>> objectPoints;//世界坐标系下的点
    std::vector<std::vector<cv::Point2f>> imagePoints;//像素坐标系下的点
    //输出矩阵
    cv::Mat cameraMatrix;//摄像机内参数矩阵
    cv::Mat distCoeffs;//透镜畸变系数矩阵
	//标定方式
	int flag;
	//用于图像去畸变 
    cv::Mat map1,map2; 
	bool mustInitUndistort;

  public:
	CameraCalibrator() : flag(0), mustInitUndistort(true) {
   };

	//导入标定图片提取角点
	int addChessboardPoints(const std::vector<std::string>& filelist, cv::Size & boardSize);
	//添加场景点与对应的图像点
    void addPoints(const std::vector<cv::Point2f>& imageCorners, const std::vector<cv::Point3f>& objectCorners);
	//标定相机
	double calibrate(cv::Size &imageSize);
    //设置标定方式
    void 
  • 21
    点赞
  • 111
    收藏
    觉得还不错? 一键收藏
  • 27
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值