两个点云a, b相减,其实就是找到二个点云中的重复点和非重复点,去掉a中的重复点就是减去b之后的点云,用python很好实现,直接用numpy 的查找功能就行了, c++ 的麻烦一点,并且要求更高。
下面是c++ 和 python 代码
# coding:utf-8
import open3d as o3d
import numpy as np
pcd = o3d.io.read_point_cloud("lidar1.pcd") # 读取pcd文件
pcd2 = o3d.io.read_point_cloud("lidar2.pcd") # 读取pcd文件
print(pcd) # 只是简单的打印信息:PointCloud with 113662 points.
print(pcd2) #
def filter_other(cloud, cloud2):
# 输入是 点云 数据,输出也是 点云 数据
a = np.asarray(cloud.points)
b = np.asarray(cloud2.points)
# 初始化一个空数组,用于存储相同的行
common_rows = []
noncommon_rows = []
# 遍历a_sorted中的每一行
for row in a:
# 使用 np.all() 和 np.any() 函数找到相同的行
same_rows = np.all(b == row, axis=1)
# print(same_rows)
if np.any(same_rows):
common_rows.append(row)
else: