[英]How to find correspondence of 3d points and 2d points
我在世界坐標系中具有一組3d點,並且在圖像中具有與2d點的對應關系。 我想找到一個矩陣,可以讓我在這些點之間進行轉換。 如何在OpenCV中做到這一點?
cv::solvePnP()
是您要尋找的東西,它從3D-2D點對應關系中找到一個對象姿勢,並產生一個旋轉向量( rvec
),該向量與平移向量( tvec
)一起從模型坐標系中獲取點相機坐標系。
您可以為此使用solvePnP :
// camMatrix based on img size
int max_d = std::max(img.rows,img.cols);
Mat camMatrix = (Mat_<double>(3,3) <<
max_d, 0, img.cols/2.0,
0, max_d, img.rows/2.0,
0, 0, 1.0);
// 2d -> 3d correspondence
vector<Point2d> pts2d = ...
vector<Point3d> pts3d = ...
Mat rvec,tvec;
solvePnP(pts3d, pts2d, camMatrix, Mat(1,4,CV_64F,0.0), rvec, tvec, false, SOLVEPNP_EPNP);
// get 3d rot mat
Mat rotM(3, 3, CV_64F);
Rodrigues(rvec, rotM);
// push tvec to transposed Mat
Mat rotMT = rotM.t();
rotMT.push_back(tvec.reshape(1, 1));
// transpose back, and multiply
return camMatrix * rotMT.t();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.