opencv中的initUndistortRectifyMap函数在x方向和y方向上都会产生多幅图像,其中包含了不失真像素的坐标,它基于本征摄像机矩阵、畸变矩阵和旋转矩阵来计算这些映射。
initUndistortRectifyMap(cam1,dst1,R1,P1, imageSize, CV_16SC2, map1x,map1y);cam1 (内禀摄像机矩阵) dst1 (失真系数) R1 (旋转矩阵) map1x (新的图像大小映射,以表示移位的x坐标在未失真图像中的位置) map2x (新的图像大小映射,以表示移位的y坐标位于未失真图像中),因此,如果在畸变图像(x失真,y失真)中新的图像坐标,则可以使用
x_undistort = map1x.at<short>(ydistort,xdistort);
y_undistort = map2x.at<short>(ydistort,xdistort);我检查了相应的点在不失真的图像,他们没有结果在同一点。我在(0,0)处检查了map1x的值,它包含负值,当我单击控制台查找坐标值时,它给出了(0:im_width,0:imheight)的相应结果。有正常化程序吗?如何在不处理整个图像的情况下直接计算点。
发布于 2016-02-29 01:54:32
像素的坐标是整数。所以把它们作为浮点数是没有意义的。
如果您需要Point2f,可以简单地从检索到的Point构造一个Point。
double minVal; double maxVal; Point minLoc; Point maxLoc;
minMaxLoc( result, &minVal, &maxVal, &minLoc, &maxLoc, Mat() );
Point2f minLocF(minLoc);
Point2f maxLocF(maxLoc);如果您需要一个带有该签名的函数,则可以将其应用于包装器函数中,或者更改OpenCV源代码并重新编译(不推荐)。
https://stackoverflow.com/questions/35690659
复制相似问题