仅对从扭曲图像获得的坐标应用重映射,而不对整个图像应用重映射

Apply remap only on coordinates obtained from distorted image and not on whole image

本文关键字:应用 图像 映射 坐标      更新时间:2023-10-16

opencv 中的 initUndistortRectifyMap 函数在 x 和 y 方向上产生 maap,其中包含未失真像素的坐标,它根据固有的相机矩阵、失真矩阵和旋转矩阵计算这些映射。

initUndistortRectifyMap(cam1,dst1,R1,P1, imageSize, CV_16SC2, map1x,map1y);

CAM1(固有相机矩阵)DST1(失真系数)R1(旋转矩阵)map1x(图像大小的新地图,用于表示移动的x坐标在未失真图像中的位置)map2x ((图像大小的新地图,用于表示移位的 y 坐标在未失真的图像中的位置)因此,如果新的图像坐标在扭曲的图像中(x扭曲,ydistort)未失真可以使用以下公式计算

x_undistort = map1x.at<short>(ydistort,xdistort);
y_undistort = map2x.at<short>(ydistort,xdistort);

我检查了未失真图像中的相应点,它们不会导致相同的点。我在 (0,0) 处检查了 map1x 的值,它包含负值,当我单击控制台查找坐标值时,它会给出来自 (0:im_width,0:imheight) 的相应结果。是否有任何规范化程序?如何在不处理整个图像的情况下直接计算点。

像素的坐标是整数。因此,将它们作为浮点数是没有意义的。

如果需要Point2f,可以简单地从检索到的Point构造一个Point2f

double minVal; double maxVal; Point minLoc; Point maxLoc;
minMaxLoc( result, &minVal, &maxVal, &minLoc, &maxLoc, Mat() );
Point2f minLocF(minLoc);
Point2f maxLocF(maxLoc);

如果您需要具有该签名的函数,则可以在包装器函数中应用它,或更改 OpenCV 源代码并重新编译(不推荐)。