如何取出三维数组并将其转换为模型?
问题描述:
我正在使用Open CV,并且能够从代码中提取多维数据和图像,但是显示它的简单方法是什么?我有一个3D阵列:如何取出三维数组并将其转换为模型?
line start [x] [y] [z]
line end [x] [y] [z]
行之间的任何东西都会被填满一个坚实的平坦表面。
是否有某种功能可以用来轻松显示给出这些点或任何其他点我失踪的3D图像?
如该伪代码:
display_3d(x,y,z,angle)
任何帮助高度赞赏。另外我正在使用C++。
答
我不确定如果我理解正确,但为什么你有3D数组?
-
较表面的三维点的阵列通常是3D点的一维数组:
float points[n][3]; // not float points[nx][ny][nz] !!!
我不CV用户,所以我会坚持(OpenGL的)渲染,但你可以使用改为任何其他渲染。
1.如果点表示凹平坦表面上单一平面
- !!!
- 并顺序(不混了)
-
那么你可以使用GL_TRIANGLE_FAN或任何其他呈现相似。
float points[n]={ {x,y,z},{x,y,z},...}; glBegin(GL_TRIANGLE_FAN); glVertex3fv(points[0]); glVertex3fv(points[1]); glVertex3fv(points[2]); ... glVertex3fv(points[n-1]); glEnd();
2,如果没有,那么你必须三角数据
- 这不是一件容易的事,但也有一些库,在那里,做到这一点。
- 不知道的OpenCV可以做到这一点,寻找三角测量功能(耳朵滴等)
- 我更喜欢我自己的三角测量程序(用于调试好,也为更多的多边形信息),但有一点困难也有效地编码并且在你不习惯使用算法时正确。
答
首先,您需要找到您的积分的convex hull,这意味着要找到一组点的非模糊和高效的表示形式。一旦你这样做,你将需要三角网格,通常使用delaunay triangulation。 QHull提供了这样的功能。