get point position after fisheye::initUndistortRectifyMap

145 views Asked by At

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!!!

1

There are 1 answers

0
user13132711 On

maybe you can use cv::fisheye::undistortPoints