相机标定

使用opencv中标定函数calibrateCamera获取相机的内外参数

使用棋盘的目的就是在不知道棋盘像素坐标和对应的三维坐标的前提下通过从不同的角度拍摄的N张像片来获取棋盘点的像素坐标和目标点坐标,从而得到相机的内参数矩阵和旋转平移向量。本实验跳过棋盘标定环节,基于已知的图像像素坐标和三维坐标的基础上进行相机标定,并和已知的相机内参数进行比较,得出差异。
已知图片Left_00003,像素坐标,三维坐标。 
相关网址:http://m.blog.csdn.net/blog/ychl87/11473593

#include "opencv2/calib3d/calib3d.hpp"
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <fstream>
#include <vector>


using namespace cv;
using namespace std;;


int main(int argc, char** argv)
{
//加载影像


Mat view;
view = imread("Left_00003.jpg", 1);
if(view.empty())
{
return -1;
}


//获取影像的大小


Size imagesize = view.size();


//相机标定
cout  << "***********开始相机标定***********" << endl << endl;


vector<Point3f>object;
vector<Point2f>image;
vector<vector<Point3f>>objectPoints;
vector<vector<Point2f>>imagePoints;


Mat cameraMatrix;
Mat disCoeffs;
vector<Mat>rvecs;
vector<Mat>tvecs;


//读取像素坐标


fstream inFileimage1;
inFileimage1.open("left00003imagePoints.txt");


int num;
inFileimage1 >> num;


for (int i = 0 ;i < num;i ++)
{
Point2f pt;


inFileimage1 >> pt.x;
inFileimage1 >> pt.y;




image.push_back(pt);
}


//读取对应的三维世界坐标


fstream infileimage2;
infileimage2.open("left00003objectPoints.txt");


infileimage2 >> num;
for (int i = 0 ;i < num;i ++)
{
Point3f pt;
pt.z = 0;


infileimage2 >> pt.x;
infileimage2 >> pt.y;


object.push_back(pt);
}


imagePoints.push_back(image);
objectPoints.push_back(object);


//相机标定


calibrateCamera(objectPoints,imagePoints,imagesize,cameraMatrix,disCoeffs,rvecs,tvecs);


//标定参数输出


cout << "*************相机参数**************" << endl;
cout << cameraMatrix<<endl;


cout <<  "*************畸变参数**************" << endl;
cout << disCoeffs << endl;


vector<Mat>::iterator it;
for (it =rvecs.begin();it!=rvecs.end();it++)
{
cout <<  "*************旋转向量**************" << endl;
cout << *it << endl;
}


vector<Mat>::iterator it1;
for (it1 =tvecs.begin();it1!=tvecs.end();it1++)
{
cout <<  "*************平移向量**************" << endl;
cout << *it1 << endl;
}

return 0;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值