通过采集的图像我们可以得到畸变后的图像,要得到没有畸变的图像要通过畸变模型推导其映射关系。
真实图像 imgR 与 畸变图像 imgD 之间的关系为: imgR(U, V) = imgD(Ud, Vd) 。遍历所有(U,V)填充为映射对应的(Ud,Vd)即可实现图像去畸变处理。
前提条件是:已经得知相机内参K以及畸变参数k1,k2,k3,p1,p2,这部分可以由matlab工具箱实现。

代码:
#include <opencv2/opencv.hpp>
#include <string>
#include <math.h>
using namespace std;
using namespace cv;
int main(int argc, char **argv) {
// 内参
double k1 = -0.3630, k2 = 0.1100, p1 = 0, p2 = 0;
double fx = 1026, fy = 1019.2, cx = 922.9716, cy = 589.6080;
char image_name[100];
for (int num = 1; num < 302; num++)
{
sprintf_s(image_name,"./image/%d.jpg",num);
Mat image = cv::imread(image_name, 0); // 图像是灰度图,CV_8UC1
int rows = image.rows, cols = image.cols;
Mat image_undistort = Mat(rows, cols, CV_8UC1)

本文介绍了如何使用initUndistortRectifyMap和remap函数进行图像去畸变处理,通过畸变模型推导映射关系,以实现真实图像到畸变图像的矫正。前提条件包括已知相机内参和畸变参数,这些参数可通过MATLAB工具箱获取。在去畸变过程中,采用了双线性内插法,该方法在两个方向上进行线性内插,常用于光流法中。参考链接提供更详细信息。
最低0.47元/天 解锁文章
2870





