通过采集的图像我们可以得到畸变后的图像,要得到没有畸变的图像要通过畸变模型推导其映射关系。
真实图像 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 r