利用OpenCV进行相机标定的源代码

本文档介绍了如何使用OpenCV库进行相机标定的详细过程,包括关键步骤和代码示例。通过查找并检测棋盘格在不同图像中的角点,计算得到相机的内参数矩阵和畸变系数。提供的代码已经修复了OpenCV中文官网示例中的问题,并可处理多张图像。
摘要由CSDN通过智能技术生成

/*对相机标定的说明:利用OpenCV对相机进行标定的过程,可参看OpenCV提供的帮助文档,非常的有用。

我在这里说明一些关键的,希望对大家有所帮助。一是本程序由于格子的实际坐标是随意给的(当然也有

一定方法),所以也就是说“世界坐标系是动的,每幅图像一个”,故每幅图像有一个外参数阵;二是

从一般标定之后的工作来说,在这步标定中所计算得到的外参数基本没用,所以我们不关心外参数;三是

我们主要关心的是内参数,只要相机的焦距不变,内参数就不变。另外,要说明一下代码大量参照了OpenCV

中文官方网上给出的相机标定的代码,但是那个代码有些问题,而且还让人不知怎么运行!这些我这里已经

做了修改;标定的所需的棋盘图片,大家可自己照,也是去http://graphics.cs.msu.su/en/research/calibration/

上去找,上面提供了三组标定用的图片*/

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// OpenCV
#include <cxcore.h>
#include <cv.h>
#include <highgui.h>
#include <cvaux.h>

void InitCorners3D(CvMat *Corners3D, CvSize ChessBoardSize, int Nimages, float SquareSize);

int image_width = 320;
int image_height = 240;//待标定图片的大小
const int ChessBoardSize_w = 5;
const int ChessBoardSize_h = 4;//图片中可标定的标角数
const CvSize  ChessBoardSize = cvSize(ChessBoardSize_w,ChessBoardSize_h);
const int NPoints = ChessBoardSize_w*ChessBoardSize_h;
const int NImages=12;//待标定的图片数
int corner_count[NImages] = {0};
float    SquareWidth = 20; //棋盘格子的边长,可任意设定,不影响内参数,只影响内参数

CvMat *intrinsics;
CvMat *distortion_coeff;
CvMat *rotation_vectors;
CvMat *translation_vectors;
CvMat *object_points;
CvMat *point_counts;
CvMat *image_po

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值