Original author | Dmitrii Klepikov |
---|---|
Compatibility | OpenCV >= 5.0 |
目标
在本教程中,您将
- 加载和保存点云数据
- 将数据可视化
要求
为实现可视化,您需要编译支持 OpenGL 的 OpenCV 库。为此,在从源代码编译 OpenCV 时,应在 CMake 中设置 WITH_OPENGL 标志为 ON。
实践
可以使用 cv::loadPointCloud
和 cv::savePointCloud
加载和保存点云。
目前支持的格式有
vertices, normals = cv2.loadPointCloud("teapot.obj")
函数 cv::loadPointCloud
返回浮点(cv::Point3f
)矢量及其法线矢量(如果在源文件中指定)。要将其可视化,您可以使用 viz3d 模块中的函数,但需要将数据重新解释为另一种格式
vertices = np.squeeze(vertices, axis=1)
color = [1.0, 1.0, 0.0]
colors = np.tile(color, (vertices.shape[0], 1))
obj_pts = np.concatenate((vertices, colors), axis=1).astype(np.float32)
cv2.viz3d.showPoints("Window", "Points", obj_pts)
cv2.waitKey(0)
在介绍的代码示例中,我们为每个点添加了颜色属性,结果将是:
如需更多信息,可添加网格:
vertices, normals = cv2.loadPointCloud("teapot.obj")
绘制 3D 物体的另一种可能方式是网格。为此,我们使用特殊函数来加载网格数据并显示它。目前只支持 .OBJ 文件,而且在处理之前必须对其进行三角剖分(三角剖分–将面分解为三角形的过程)。
vertices, _, indices = cv2.loadMesh("../data/teapot.obj")
vertices = np.squeeze(vertices, axis=1)
cv2.viz3d.showMesh("window", "mesh", vertices, indices)