У меня есть облако точек, созданное из нескольких изображений. Я извлек из него плоскость, он также находится в 3d-системе координат, это означает, что у меня есть плоское уравнение этой плоскости. Но ни в одном из исходных изображений плоскость имеет орто-нормальный вид, то есть плоскость не параллельна плоскости просмотра. Но, поскольку у меня есть 3D-облако самолета, я хочу проецировать его в плоскость XY, то есть я хочу сделать плоскость параллельной плоскости просмотра и создать изображение из нее. Каков алгоритм или функция для этого в C++/OpenCV?Поиск преобразования перспективы между двумя плоскостями
ответ
Я не уверен, чтобы понять, что именно вы хотите сделать, но это может помочь вам, я сделал это с шахматной доской:
std::vector<cv::Point2f> not_a_rect_shape; // In this vector you should save the x,y coordinates of your 3D rect
// the not_a_rect_shapecoordinates are from you source frame
// Define the destination image
quad = cv::Mat::zeros(300, 220, CV_8UC3); // the size is important, it depends on your application, I have to say that 300x220 isn't always the right one. you have to give more infomations!!
// these will be the parallel plane vector of point
quad_pts.push_back(cv::Point2f(0, 0));
quad_pts.push_back(cv::Point2f(quad.cols, 0));
quad_pts.push_back(cv::Point2f(quad.cols, quad.rows));
quad_pts.push_back(cv::Point2f(0,quad.rows));
transformationMatrix= cv::getPerspectiveTransform(not_a_rect_shape, quad_pts);// this is you transformation matirx
cv::warpPerspective(src, quad, transformationMatrix,quad.size(),CV_INTER_LINEAR,cv::BORDER_ISOLATED); // the flags could change
Теперь четырехъядерный кадр должен быть то, что вы ищете ! Надеюсь, это поможет
Ну, я использовал его, когда у меня есть изображение известной прямоугольной формы (то есть игральной карты). Из этого изображения я могу получить точное cv :: Point2fs. Но теперь у меня есть трехмерная координата изображения, есть и отрицательные (x, y) s. Итак, сначала мне нужно получить 2d-точки изображения, где плоскость параллельна плоскости обзора (у меня нет такого изображения заранее). Итак, я хочу, чтобы координаты 2d изображения (которые не существовали заранее) из 3d-координаты мира. –
Положив это, я хочу проецировать координату 3d-мира в координату 2d изображения, где я получу орто-нормальный вид (объект прямой и вертикальный/параллельный плоскости зрения) объекта –
вы можете загрузить свое изображение так что я могу понять это лучше – Engine
это помогло? – Engine