2

我正在使用 Open CV,我能够从我的代码中提取多维数据和图像,但是显示它的简单方法是什么?我有一个 3D 数组:

line start [x] [y] [z]
line end   [x] [y] [z]

线条之间的任何东西都将被一个坚固的平面填充。

给定这些点或我缺少的任何其他点,我可以使用某种功能轻松显示 3d 图像吗?

比如这个伪代码:

display_3d(x,y,z,angle)

非常感谢任何帮助。我也在使用 C++。

4

2 回答 2

0

首先,您需要找到点的凸包,这意味着找到一组点的明确且有效的表示。完成此操作后,您需要对网格进行三角剖分,通常使用delaunay triangulationQHull提供了这样的功能。

于 2014-01-14T10:23:03.880 回答
0

我不确定我是否理解正确,但为什么你有 3D 数组???

  • 表示表面的 3D 点数组通常是 3D 点的 1D 数组:

            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是否也可以做到这一点,寻找三角测量功能(耳朵掉落等)
  • 我更喜欢我自己的三角测量例程(更适合调试和额外的多边形信息),但是当你不习惯使用算法时,它有点难以有效和正确地编码。
于 2014-01-14T10:15:59.517 回答