opencv自带图像去畸变remap和initUndistortRectifyMap

去除畸变:
(1)对整幅图像去除畸变
(2)对一些点集去除畸变求位置

首先是图片:

initUndistortRectifyMap
中畸变矩阵参数解释:
double k1 = ((double*)distCoeffs.data)[0];  
    double k2 = ((double*)distCoeffs.data)[1];  
    double p1 = ((double*)distCoeffs.data)[2];  
    double p2 = ((double*)distCoeffs.data)[3];  
    double k3 = distCoeffs.cols + distCoeffs.rows - 1 >= 5 ? ((double*)distCoeffs.data)[4] : 0.;  
    double k4 = distCoeffs.cols + distCoeffs.rows - 1 >= 8 ? ((double*)distCoeffs.data)[5] : 0.;  
    double k5 = distCoeffs.cols + distCoeffs.rows - 1 >= 8 ? ((double*)distCoeffs.data)[6] : 0.;  
    double k6 = distCoeffs.cols + distCoeffs.rows - 1 >= 8 ? ((double*)distCoeffs.data)[7] : 0.;  

使用样例:

Mat cameraMatrix = Mat::eye(3, 3, CV_64F);
    //内参矩阵, 就算复制代码,也不要用我的参数。摄像头都不一样...
    cameraMatrix.at<double>(0, 0) = 2.075319928848340e+03;
    cameraMatrix.at<double>(0, 1) = 0;
    cameraMatrix.at<double>(0, 2) = 1.273350420020438e+03;
    cameraMatrix.at<double>(1, 1) = 2.073416138777327e+03;
    cameraMatrix.at<double>(1, 2) = 6.898818022397845e+02;
    //畸变参数,不要用我的参数~
    Mat distCoeffs = Mat::zeros(5, 1, CV_64F);
    distCoeffs.at<double>(0, 0) = 0.005961692158170;
    distCoeffs.at<double>(1, 0) = 0.014892085926656;
    distCoeffs.at<double>(2, 0) = -0.007714274148788;
    distCoeffs.at<double>(3, 0) = -0.010548832296675;
    distCoeffs.at<double>(4, 0) = 0;
    Mat view, rview, map1, map2;
    Size imageSize;
    imageSize = image.size();
    initUndistortRectifyMap(cameraMatrix, distCoeffs, Mat(),
getOptimalNewCameraMatrix(cameraMatrix, distCoeffs, imageSize, 1, imageSize, 0),
                            imageSize, CV_16SC2, map1, map2);
    remap(image, image, map1, map2, INTER_LINEAR);

但是remap后的效果没有自己写去畸变的效果好看。反正我觉得很怪异。

然后是点集:

undistortPoints(imgpt[k], imgpt[k], cameraMatrix[k], distCoeffs[k], Mat(), cameraMatrix[k]);
Mat imgpt[2];
imgpt[k] = Mat(imagePoints[k][i]);
imagePoints类型为Point2f
  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值