在鱼眼::initUnstortRectifyMap之后获取点位置



我从鱼眼相机上得到了一张照片,我需要进行相机校准。

现在我知道了点,就像照片中的A一样,在fisheye::initUndistortRectifyMap(cameraMatrix, distCoeffs, Mat(),dst_cameraMatrix,imageSize*2, CV_32FC1, map_x, map_y函数之后,我得到了map_x,map_y。并用remap进行了标定。

现在我想知道校准后的点位置A,我在Opencv上查看了文档并搜索了一些相关问题,但几乎所有问题都是基于与原始图像大小相同的大小,但我知道我将图像大小增加了*2

这样,如何在校准后获得点位置A

以下是我的代码:

Mat distortRectify;
Mat cameraMatrix = Mat::eye(3, 3, CV_64F);
Mat dst_cameraMatrix = Mat::eye(3, 3, CV_64F);
Mat distCoeffs = Mat::zeros(4, 1, CV_64F);
Size imageSize(1920*2,1080*2);
Mat map_x, map_y;
getCameraParams(cameraMatrix,dst_cameraMatrix,distCoeffs, "ft");
fisheye::initUndistortRectifyMap(cameraMatrix, distCoeffs, Mat(),
dst_cameraMatrix,imageSize, CV_32FC1, map_x, map_y);
remap(Image, distortRectify, map_x, map_y, INTER_LINEAR);
vector<vector<Point2f>> Rectify_contours;
for(size_t i=0;i<contours.size();i++)
{
vector<Point2f> temp_vec;
for(auto recitify_point : contours[i])
{
Point2f temp_point;
float x,y;
x = recitify_point.x;
y = recitify_point.y;
temp_point.x = map_x.at<float>(y,x);
temp_point.y = map_y.at<float>(y,x);
temp_vec.push_back(temp_point);
}
Rectify_contours.push_back(temp_vec);
}
for(size_t i =0; i<Rectify_contours.size();i++)
{
for(auto point: Rectify_contours[i])
{
circle( distortRectify, point, 3,  Scalar(0), 2, 8, 0 );
}
}
imshow("distortRectify",distortRectify);
waitKey();

我没能用上面的代码得到正确的点位置,我已经关注这个问题将近一天了。有人能帮我吗?如有任何回应,我们将不胜感激!!!

也许您可以使用cv::fisheye::undistortPoints

最新更新