#include "stdafx.h" #include "ImageCalibrator.h" #include using namespace std; CImageCalibrator::CImageCalibrator() { } CImageCalibrator::~CImageCalibrator() { } cv::Mat CImageCalibrator::imageCalibration(cv::Mat inImg) { //相机内参矩阵与畸变系数,通过黑白棋盘格标定法测定得到 cv::Mat cameraMatrix = (cv::Mat_ (3, 3) << 720.689879, 0, 957.57171, 0, 721.705519, 935.484724, 0, 0, 1), distCoeffs = (cv::Mat_ (1, 4) << -0.0765657862, 0.0190079504, -0.032948619, 0.0159874152); //重投影误差rms:0.601462 //平移操作,修正鱼眼图像位置偏差,对照测定参数用相机采集的图片 cv::Mat warp_matrix = (cv::Mat_(2, 3) << cos(0), -sin(0), -63, //x轴平移像素 sin(0), cos(0), -68); //y轴平移像素 cv::warpAffine(inImg, inImg, warp_matrix, inImg.size(), cv::INTER_LINEAR); //取有效鱼眼镜头区域 cv::Mat inImg2(inImg, cv::Rect(324, 0, 1944, 1944)); //鱼眼画面展平 cv::Mat outImg, new_intrinsic_mat; cameraMatrix.copyTo(new_intrinsic_mat); //调节视场大小,乘的系数越小视场越大,可调整 new_intrinsic_mat.at(0, 0) *= 0.7; new_intrinsic_mat.at(1, 1) *= 0.7; //调节校正图中心,建议置于校正图中心 new_intrinsic_mat.at(0, 2) = 0.5 * inImg2.cols; new_intrinsic_mat.at(1, 2) = 0.5 * inImg2.rows; cv::fisheye::undistortImage(inImg2, outImg, cameraMatrix, distCoeffs, new_intrinsic_mat); //展平后扣出有效分析区域 //Mat roi(outImg, cv::Rect(711, 465, 557, 941)); //显示展平后的图像 //cv::imshow("标定效果", outImg); cv::waitKey(0); return outImg; }