准备 1.运行环境:VS2010与VS2017均可,opencv2.9与opencv2.9以上均可。
2.拍十五张标定板图片
文章图片
3.放到calibdata.txt目录下
文章图片
4.代码
#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include "opencv2/highgui/highgui.hpp"
#include
#include using namespace cv;
using namespace std;
void main()
{
ifstream fin("calibdata.txt");
/* 标定所用图像文件的路径 */
ofstream fout("caliberation_result.txt");
/* 保存标定结果的文件 */
//读取每一幅图像,从中提取出角点,然后对角点进行亚像素精确化
cout<<"开始提取角点………………";
int image_count=0;
/* 图像数量 */
Size image_size;
/* 图像的尺寸 */
Size board_size = Size(6,8);
/* 标定板上每行、列的角点数 */
vector image_points_buf;
/* 缓存每幅图像上检测到的角点 */
vector image_points_seq;
/* 保存检测到的所有角点 */
string filename;
int count= -1 ;
//用于存储角点个数。
while (getline(fin,filename))
{
image_count++;
// 用于观察检验输出
cout<<"image_count = "<count = "< 第 "< : "<"<"< object_points;
/* 保存标定板上角点的三维坐标 */
/*内外参数*/
Mat cameraMatrix=Mat(3,3,CV_32FC1,Scalar::all(0));
/* 摄像机内参数矩阵 */
vector point_counts;
// 每幅图像中角点的数量
Mat distCoeffs=Mat(1,5,CV_32FC1,Scalar::all(0));
/* 摄像机的5个畸变系数:k1,k2,p1,p2,k3 */
vector tvecsMat;
/* 每幅图像的旋转向量 */
vector rvecsMat;
/* 每幅图像的平移向量 */
/* 初始化标定板上角点的三维坐标 */
int i,j,t;
for (t=0;
t(0,j) = Vec2f(image_points2[j].x, image_points2[j].y);
tempImagePointMat.at(0,j) = Vec2f(tempImagePoint[j].x, tempImagePoint[j].y);
}
err = norm(image_points2Mat, tempImagePointMat, NORM_L2);
total_err += err/=point_counts[i];
std::cout<<"第"<>imageFileName;
filePath+=imageFileName;
filePath+=".jpg";
Mat imageSource = imread(filePath);
Mat newimage = imageSource.clone();
//另一种不需要转换矩阵的方式
//undistort(imageSource,newimage,cameraMatrix,distCoeffs);
remap(imageSource,newimage,mapx, mapy, INTER_LINEAR);
imshow("原始图像",imageSource);
imshow("矫正后图像",newimage);
waitKey();
StrStm.clear();
filePath.clear();
StrStm<>imageFileName;
imageFileName += "_d.jpg";
imwrite(imageFileName,newimage);
}
std::cout<<"保存结束"<
划重点 【图像处理|opencv使用相机标定——实战篇(附代码与可执行程序并解决程序崩溃问题)】右键工程文件的属性,找到配置属性,找到常规,找到MFC的使用,将使用标准Windows库改为在静态库中使用MFC。
程序运行结果
文章图片
文章图片
点此下载项目工程文件(附标定图片与可运行程序)
推荐阅读
- 笔记|工业缺陷检测项目实战(一)——基于opencv的工件缺陷检测C++实现
- python|opencv-python 入门实战(传统方法Hog+svm实现目标检测)
- 从零学习openCV|【从零学习openCV】IOS7下的人脸检测
- 图像处理|【OpenCV-Python】(调用电脑摄像头+读取视频)
- 计算机视觉|10分钟学会使用YOLO及Opencv实现目标检测
- OpenCV|OpenCV项目实战——虚拟画笔
- opencv|基于深度学习的口罩识别与检测PyTorch实现
- 定位|利用稀疏的语义视觉特征进行道路建图和定位(ICRA2021)
- 可视化|opencv基础入门——环境搭建与基础操作