图片位于 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 +

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

被折叠的 条评论
为什么被折叠?



