30万像素UVC相机拍摄图片,与海康600万像素相机无法相比,但这个更贴近入门。想起我们一个大三学弟带大一的:有些小同志没电脑但是有手机,然后给他们手机上整了一个软件,在手机上编C语言程序。属实震惊了我,只要思想不滑坡,办法总比困难多。
有了cameraMatrix和distCoeffs这两个相机内参后,我们可以做什么?
之前600万的工业相机几乎看不到图像畸变,所以买了一个UVC摄像机。在linux下还没驱动起来,在Windows上取得图片。一般垂直安装会产生"桶形畸变",倾斜安装会产生"梯形畸变"。
一、校准效果
未校准前:
undistort()校准效果:
initUndistortRectifyMap()和remap()校准效果:
校准程序:
//对图片进行校正
php
cv::Mat imageSource = cv::imread("../CalibrateCamera/data/uvc/5.bmp");
cv::Mat newimage = imageSource.clone();
cv::Mat mapx = cv::Mat(imageSize, CV_32FC1);
cv::Mat mapy = cv::Mat(imageSize, CV_32FC1);
cv::Mat R = cv::Mat::eye(3, 3, CV_32F);
cv::initUndistortRectifyMap(cameraMatrix,distCoeffs,R,cameraMatrix,imageSize,CV_32FC1,mapx,mapy);
cv::remap(imageSource, newimage, mapx, mapy, cv::INTER_LINEAR);
// undistort(imageSource, newimage, cameraMatrix, distCoeffs);
cv::imwrite("../CalibrateCamera/data/new/new.bmp", newimage);
二、函数介绍
方法一:使用initUndistortRectifyMap和remap两个函数配合实现。
initUndistortRectifyMap用来计算畸变映射,remap把求得的映射应用到图像上。
properties
void initUndistortRectifyMap(
InputArray cameraMatrix,
InputArraydistCoeffs,
InputArray R,
InputArray newCameraMatrix,
Size size,
int m1type,
OutputArray map1,
OutputArray map2);
第一个参数cameraMatrix为之前求得的相机的内参矩阵;
第二个参数distCoeffs为之前求得的相机畸变矩阵;
第三个参数R,可选的输入,是第一和第二相机坐标之间的旋转矩阵;
第四个参数newCameraMatrix,输入的校正后的3X3摄像机矩阵;
第五个参数size,摄像机采集的无失真的图像尺寸;
第六个参数m1type,定义map1的数据类型,可以是CV_32FC1或者CV_16SC2;
第七个参数map1和第八个参数map2,输出的X/Y坐标重映射参数;
properties
void remap( InputArray src,
OutputArray dst,
InputArray map1,
InputArray map2,
int interpolation,
int borderMode=BORDER_CONSTANT,
const Scalar& borderValue=Scalar());
第一个参数src,输入参数,代表畸变的原始图像;
第二个参数dst,矫正后的输出图像,跟输入图像具有相同的类型和大小;
第三个参数map1和第四个参数map2,X坐标和Y坐标的映射;
第五个参数interpolation,定义图像的插值方式;
第六个参数borderMode,定义边界填充方式;
properties
void undistort( InputArray src,
OutputArray dst,
InputArray cameraMatrix,
InputArray distCoeffs,
InputArray newCameraMatrix=noArray() );
第一个参数src,输入参数,代表畸变的原始图像;
第二个参数dst,矫正后的输出图像,跟输入图像具有相同的类型和大小;
第三个参数cameraMatrix为之前求得的相机的内参矩阵;
第四个参数distCoeffs为之前求得的相机畸变矩阵;
第五个参数newCameraMatrix,默认跟cameraMatrix保持一致;
方法一相比方法二执行效率更高一些,推荐使用。
欢迎关注,记录学习过程。