OpenCV如何将相机畸变应用到图像上。

3

我有一张已经渲染好的图片,想要将来自opencv的径向和切向畸变系数应用到我的图片上。即使有去畸变函数,但是没有畸变函数。那么我怎么能用畸变系数对我的图像进行畸变呢?

enter image description here

1个回答

4

我也在寻找同样的功能,但是没有找到,于是我自己实现了它。这里是C++代码。

首先,你需要使用焦距和中心点来归一化图像点。

rpt(0) = (pt_x - cx) / fx
rpt(1) = (pt_y - cy) / fy

接着扭曲规范化图像点。

double x = rpt(0), y = rpt(1);

//determining the radial distortion
double r2 = x*x + y*y;
double icdist = 1 / (1 - ((D.at<double>(4) * r2 + D.at<double>(1))*r2 + D.at<double>(0))*r2);

//determining the tangential distortion
double deltaX = 2 * D.at<double>(2) * x*y + D.at<double>(3) * (r2 + 2 * x*x);
double deltaY = D.at<double>(2) * (r2 + 2 * y*y) + 2 * D.at<double>(3) * x*y;
x = (x + deltaX)*icdist;
y = (y + deltaY)*icdist;

接下来,您可以使用投影中心和焦距对该点进行翻译和缩放:

x = x * fx + cx
y = y * fy + cy

我添加了最后一步(转换回图像坐标)的公式,以便完整。如果我有任何错误,请回滚。 - luator

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接