视觉SLAM实践入门——(6)OpenCV之图像去畸变

本文详细介绍如何使用OpenCV库的cv::Undistort函数对带有畸变的图片进行校正,包括畸变参数的设置、内参计算及实际操作步骤,展示了去畸变前后图像的对比。

图片位于 slambook2/ch5/imageBasics/distorted.png

去畸变函数cv::Undistort()

#include <iostream>
#include <string>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

#define IMAGE_FILE "../distorted.png"


int main(int argc, char **argv) {
  
  //畸变参数
  double k1 = -0.28340811, k2 = 0.07395907, p1 = 0.00019359, p2 = 1.76187114e-05;
  
  //内参
  double fx = 458.654, fy = 457.296, cx = 367.215, cy = 248.375;
  
  //灰度图,CV_8UC1
  Mat image = imread(IMAGE_FILE, 0);
  int rows = image.rows, cols = image.cols;
  //声明去畸变图存放的变量
  Mat image_undistort = Mat(rows, cols, CV_8UC1);	
  
  //去畸变
  for(int v = 0; v < rows; v++)
  {
   for(int u = 0; u < cols; u++)
   {
     //(u,v)对应畸变图像的坐标(u_distorted,v_distorted)
     double x = (u - cx) / fx, y = (v - cy) / fy;
     double r = sqrt(x*x + y*y);
     double x_distorted = x * (1 + k1 * r * r + k2 * r * r * r * r) + 2 * p1 * x * y + p2 * (r * r + 2 * x * x);
     double y_distorted = y * (1 +
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值