我有一个从多个图像创建的点云。我从中提取了一个平面,它也在 3d 坐标系中,这意味着我有那个平面的平面方程。但在所有原始图像中,平面都没有正交视图,即平面不平行于观察平面。但是,由于我有平面的 3d 云,我想将它投影到 XY 平面上,即我想让平面平行于观察平面并从中创建图像。在 C++/OpenCV 中执行它的算法或函数是什么?
问问题
966 次
1 回答
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
现在四帧应该是你要找的!我希望它有帮助
于 2013-09-06T10:40:49.817 回答