Я получил фотографию с камеры 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();
Мне не удалось получить правильное положение точки с помощью вышеуказанных кодов, и я сосредоточился на этой проблеме почти один день. Кто-нибудь может мне помочь? Любой ответ будет оценен !!!