OPEN3D(python)学习笔记-1.4 点云裁剪

  • Post author:
  • Post category:python


官方文档链接


http://www.open3d.org/docs/release/

示例代码



read_selection_polygon_volume

读取指定的多边形区域的json文件。

import open3d as o3d
import numpy as np


# 从文件中读取点云
pcd = o3d.io.read_point_cloud('./fragment.ply')

vol = o3d.visualization.read_selection_polygon_volume('./cropped.json')
chair = vol.crop_point_cloud(pcd)
o3d.visualization.draw_geometries([chair],
                                  zoom=0.7,
                                  front=[0.5439, -0.2333, -0.8060],
                                  lookat=[2.4615, 2.1331, 1.338],
                                  up=[-0.1781, -0.9708, 0.1608])

将需要读取的文件放在与该py文件的同级目录下,文件可从文章末尾的某盘中获取。

json中文件的内容如下:

{
	"axis_max" : 4.022921085357666,
	"axis_min" : -0.76341366767883301,
	"bounding_polygon" : 
	[
		[ 2.6509309513852526, 0.0, 1.6834473132326844 ],
		[ 2.5786428246917148, 0.0, 1.6892074266735244 ],
		[ 2.4625790337552154, 0.0, 1.6665777078297999 ],
		[ 2.2228544982251655, 0.0, 1.6168160446813649 ],
		[ 2.166993206001413, 0.0, 1.6115495157201662 ],
		[ 2.1167895865303286, 0.0, 1.6257706054969348 ],
		[ 2.0634657721747383, 0.0, 1.623021658624539 ],
		[ 2.0568612343437236, 0.0, 1.5853892911207643 ],
		[ 2.1605399001237027, 0.0, 0.96228993255083017 ],
		[ 2.1956669387205228, 0.0, 0.95572746049785073 ],
		[ 2.2191318790575583, 0.0, 0.88734449982108754 ],
		[ 2.2484881847925919, 0.0, 0.87042807267013633 ],
		[ 2.6891234157295827, 0.0, 0.94140677988967603 ],
		[ 2.7328692490470647, 0.0, 0.98775740674840251 ],
		[ 2.7129337547575547, 0.0, 1.0398850034649203 ],
		[ 2.7592174072415405, 0.0, 1.0692940558509485 ],
		[ 2.7689216419453428, 0.0, 1.0953914441371593 ],
		[ 2.6851455625455669, 0.0, 1.6307334122162018 ],
		[ 2.6714776099981239, 0.0, 1.675524657088997 ],
		[ 2.6579576128816544, 0.0, 1.6819127849749496 ]
	],
	"class_name" : "SelectionPolygonVolume",
	"orthogonal_axis" : "Y",
	"version_major" : 1,
	"version_minor" : 0
}

对于这个json文件,官方文档中没有给出解释,根据测试得出的结论如下,若有不对的地方还请各位大神指正:

1. asix_max为指定轴的最大值,asix_min为指定轴的最小值;

2. orthogonal_axis为指定轴;

3. bounding_polygon 可以认为是裁剪框的点集,其中指定轴的值都为0,表示为指定轴范围内所有点,因此每个点也表示一条线,每一条线与上一条线相连形成切割面,加上指定轴的最大最小值,便可确定出裁剪的范围。所以,相同的点如果顺序不同也会有着不同的效果;

4. class_name为SelectionPolygonVolume,改为其它的或删除会使得json文件加载失败;

5. version_major为1,version_minor为0,改为其它或者删除也会使得json文件加载失败。

运行效果如下:

裁剪出了想要的椅子。

文件链接

链接:https://pan.baidu.com/s/1V3anL9caeDe6bWgHsrEpTg

提取码:5u7b




版权声明:本文为qq_24219039原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。