首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >opencv c++中三维点集到虚拟像平面的投影

opencv c++中三维点集到虚拟像平面的投影
EN

Stack Overflow用户
提问于 2014-02-19 21:30:26
回答 2查看 2.9K关注 0票数 1

有人知道如何在opencv c++中将一组三维点投影到虚拟图像平面上吗?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2014-02-19 22:21:41

首先,您需要定义变换矩阵(旋转、平移等)以将3D空间映射到2D虚拟图像平面,然后将3D点坐标(x,y,z)与矩阵相乘,即可获得图像中的2D坐标。

票数 0
EN

Stack Overflow用户

发布于 2014-02-22 16:24:07

注册(RGB2)或替代viewPoint功能(RGB1.5)确实有助于使用一行代码将深度与openNI对齐。你付出的代价是,你不能真正恢复三维空间中精确的X,Y点位置,因为行和列在对齐后移动。

有时,您不仅需要Z,还需要X、Y,并希望它们精确;此外,您还希望深度和rgb对齐。然后,您必须将rgb与深度对齐。请注意,Kinect/OpenNI不支持此对齐方式。你为此付出的代价-在深度未定义的位置没有RGB值。

如果一个人知道外部参数,即深度相机相对于颜色相机的旋转和平移,那么对齐只是一个创建另一个视点的问题:从深度恢复3D,然后从彩色相机的角度查看您的点云:即应用反向旋转和平移。例如,向右移动摄影机就像向左移动世界(点)。将3D重新投影到2D,并在需要时进行插值。这真的很容易,只是3d重建的逆;下面,Cx接近w/2,Cy接近h/2;

col =焦点*X/Z+Cx行=-焦点*Y/Z+Cy //这是因为图像中的行数向下增加

要在点云旋转后获得良好的深度图,一个合适但也更昂贵的方法是跟踪每个像素的光线,直到它与点云相交或足够接近其中一个点。这样,由于采样瑕疵,深度贴图中的孔洞会更少。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21881973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档