I got a photo from a Fisheye camera and I need to do a camera calibration.
Now I knew the point like A in the photo, after fisheye::initUndistortRectifyMap(cameraMatrix, distCoeffs, Mat(),dst_cameraMatrix,imageSize*2, CV_32FC1, map_x, map_y
function I got map_x,map_y
. And I use remap
to get calibration result.
Now I want to know the point position A after calibration, I looked document on Opencv and searched some relative questions, but almost all of them are based on the same size as original image size, But know I increased the image size by *2
.
In this way, how can I get the point position A after calibration.
Below are my code:
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();
I failed to get correct point position with above codes and I've focus on this problem for almost one day long. Anybody could help me? Any response will be appreciated!!!
maybe you can use cv::fisheye::undistortPoints