点云数据可视化 3D模块 OpenCV v5.0.0-pre版本特有

本文介绍了如何在OpenCV5.0及以上版本中加载和保存点云数据,包括OBJ和PLY格式,并展示了如何使用viz3d模块进行数据可视化,以及处理网格数据的三角剖分过程。
Original authorDmitrii Klepikov
CompatibilityOpenCV >= 5.0

目标

在本教程中,您将

  • 加载和保存点云数据
  • 将数据可视化

要求

为实现可视化,您需要编译支持 OpenGL 的 OpenCV 库。为此,在从源代码编译 OpenCV 时,应在 CMake 中设置 WITH_OPENGL 标志为 ON。

实践

可以使用 cv::loadPointCloudcv::savePointCloud 加载和保存点云。

目前支持的格式有

  • .OBJ (支持的键为 v(负责点的位置)、vn(法线坐标)和 f(网格的面),其他键将被忽略)
  • .PLY(支持所有编码类型(ascii 和字节),但数据类型仅限于浮点型)
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)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值