получить позицию точки после fisheye :: initUndistortRectifyMap - PullRequest
0 голосов
/ 11 марта 2020

Я получил фотографию с камеры Fisheye, и мне нужно выполнить калибровку камеры.

Теперь я знал точку как 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();

Мне не удалось получить правильное положение точки с помощью вышеуказанных кодов, и я сосредоточился на этой проблеме почти один день. Кто-нибудь может мне помочь? Любой ответ будет оценен !!!

1 Ответ

0 голосов
/ 27 марта 2020

возможно, вы можете использовать cv :: fisheye :: undistortPoints

...