【发布时间】:2020-06-23 16:17:25
【问题描述】:
我从鱼眼相机拍摄了一张照片,我需要进行相机校准。
现在我知道了照片中的点like 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();
我未能使用上述代码获得正确的点位置,并且我已经关注这个问题将近一天了。任何人都可以帮助我吗?任何回应将不胜感激!!!
【问题讨论】: