2013-09-06 3 views
1

У меня есть облако точек, созданное из нескольких изображений. Я извлек из него плоскость, он также находится в 3d-системе координат, это означает, что у меня есть плоское уравнение этой плоскости. Но ни в одном из исходных изображений плоскость имеет орто-нормальный вид, то есть плоскость не параллельна плоскости просмотра. Но, поскольку у меня есть 3D-облако самолета, я хочу проецировать его в плоскость XY, то есть я хочу сделать плоскость параллельной плоскости просмотра и создать изображение из нее. Каков алгоритм или функция для этого в C++/OpenCV?Поиск преобразования перспективы между двумя плоскостями

+0

это помогло? – Engine

ответ

1

Я не уверен, чтобы понять, что именно вы хотите сделать, но это может помочь вам, я сделал это с шахматной доской:

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 

Теперь четырехъядерный кадр должен быть то, что вы ищете ! Надеюсь, это поможет

+0

Ну, я использовал его, когда у меня есть изображение известной прямоугольной формы (то есть игральной карты). Из этого изображения я могу получить точное cv :: Point2fs. Но теперь у меня есть трехмерная координата изображения, есть и отрицательные (x, y) s. Итак, сначала мне нужно получить 2d-точки изображения, где плоскость параллельна плоскости обзора (у меня нет такого изображения заранее). Итак, я хочу, чтобы координаты 2d изображения (которые не существовали заранее) из 3d-координаты мира. –

+0

Положив это, я хочу проецировать координату 3d-мира в координату 2d изображения, где я получу орто-нормальный вид (объект прямой и вертикальный/параллельный плоскости зрения) объекта –

+0

вы можете загрузить свое изображение так что я могу понять это лучше – Engine