opencv中的initUndistortRectifyMap函数在x和y方向上产生maap,其中包含未失真像素的坐标,它根据内在的相机矩阵,失真矩阵和旋转矩阵计算这些贴图。
initUndistortRectifyMap(cam1,dst1,R1,P1, imageSize, CV_16SC2, map1x,map1y);
cam1(内在相机矩阵) dst1(失真系数) R1(旋转矩阵) map1x(图像大小的新地图,表示移位的x坐标在未失真图像中的位置) map2x((图像大小的新地图,表示移位的y坐标在未失真图像中的位置) 所以如果新的图像坐标扭曲的图像(xdistort,ydistort) 可以使用
计算未失真x_undistort = map1x.at<short>(ydistort,xdistort);
y_undistort = map2x.at<short>(ydistort,xdistort);
我检查了未失真图像中的相应点,它们不会产生同一点。我在(0,0)检查了map1x的值,它包含负值,当我点击控制台找到坐标值时,它给出了相应的结果(0:im_width,0:imheight)。有没有规范化程序?如何在不处理整个图像的情况下直接计算点数。
答案 0 :(得分:0)
像素的坐标是整数。因此,将它们作为浮点数是毫无意义的。
如果您需要Point2f
,则只需从检索到的Point2f
构建Point
:
double minVal; double maxVal; Point minLoc; Point maxLoc;
minMaxLoc( result, &minVal, &maxVal, &minLoc, &maxLoc, Mat() );
Point2f minLocF(minLoc);
Point2f maxLocF(maxLoc);
如果需要具有该签名的函数,可以在包装函数中应用它,或者更改OpenCV源代码并重新编译(不推荐)。