使用open3d实现点云在指定视角下的投影

这篇具有很好参考价值的文章主要介绍了使用open3d实现点云在指定视角下的投影。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.首先获取点云

import open3d as o3d
from open3d import visualization
import numpy as np
import json
pcd = o3d.io.read_point_cloud("point_cloud.ply")

2.读取外参并生成open3d形式的相机外参(我这里读的外参是c2w的) :

# 读外参
# 我的数据集是blender制作的仿真数据集,需要对坐标系进行变换
with open("/home/abc/transforms.json", encoding='utf-8') as a:
    result = json.load(a)
frame = result["frames"]
i = 0 
extrinsic = np.array(frame[i]["transform_matrix"])
TR = np.array([[1,0,0,0],
              [0,-1,0,0],
              [0,0,-1,0],
               [0,0,0,1]]
              )
# 把读到的c2w做这两步操作
extrinsic = np.dot(extrinsic,TR) # 关于x轴对称
extrinsic = np.linalg.inv(extrinsic) #c2w->w2c

3.生成open3d形式的相机内参PinholeCameraIntrinsic:

# 替换成你自己的相机内参
W = 960
H = 512 
camera_angle_x = 0.8457078337669373
focal = 0.5 * W / np.tan(0.5 * camera_angle_x)
# cx=(W-1)/2而不是W/2 !!!!!
intrinsic = o3d.cuda.pybind.camera.PinholeCameraIntrinsic(width=W, height=H, fx=focal, fy=focal, cx=(W-1) / 2,cy=(H-1) / 2)

4.初始化PinholeCameraParameters并赋值

param = o3d.cuda.pybind.camera.PinholeCameraParameters()
param.extrinsic = extrinsic
param.intrinsic = intrinsic

5.显示该视角下的点云并保存图片(手动把窗口关了才会执行下一步)文章来源地址https://www.toymoban.com/news/detail-723163.html

vis = visualization.Visualizer()
vis.create_window(window_name='pcd', width=W, height=H)
ctr = vis.get_view_control()
vis.add_geometry(pcd)
ctr.convert_from_pinhole_camera_parameters(param)
vis.run()
# 保存图片
vis.capture_depth_image("/home/abc/depth.png")
vis.capture_screen_image("/home/abc/img.png")
vis.destroy_window()

到了这里,关于使用open3d实现点云在指定视角下的投影的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Open3D 实现点云拼接】——将两个点云合并成一个

    【Open3D 实现点云拼接】——将两个点云合并成一个 点云拼接是三维重建和场景重建中的重要一步,如何高效、准确地将两个点云进行拼接是一个挑战。Open3D是一个专业的开源库,提供了丰富的三维算法和工具,其中支持点云的读取、处理和可视化。本文将介绍如何使用Open

    2024年02月13日
    浏览(26)
  • Open3D 实现建筑物点云立面和平面分割提取

    Open3D 实现建筑物点云立面和平面分割提取 点云数据在现实场景中广泛应用,例如建筑物三维重建、智能交通等领域。然而,点云数据量庞大且噪声较多,因此需要对其进行处理和分析。Open3D 是一款开源的跨平台点云处理库,在点云数据预处理、三维重建和可视化等方面有着

    2024年02月07日
    浏览(32)
  • 基于Open3D的点云处理17-Open3d的C++版本

    http://www.open3d.org/docs/latest/cpp_api.html http://www.open3d.org/docs/latest/getting_started.html#c http://www.open3d.org/docs/release/cpp_project.html#cplusplus-example-project https://github.com/isl-org/open3d-cmake-find-package https://github.com/isl-org/open3d-cmake-external-project https://github.com/isl-org/Open3D/releases Note: -DBUILD_SHARED_LIBS

    2024年02月09日
    浏览(45)
  • Open3D点云处理

    Open3D is an open-source library that supports rapid development of software that deals with 3D data. The Open3D frontend exposes a set of carefully selected data structures and algorithms in both C++ and Python. The backend is highly optimized and is set up for parallelization. Open3D是一个支持3D数据处理软件快速开发的开源库,在前端提供

    2023年04月17日
    浏览(45)
  • open3d点云平移

    功能简介 open3d中点云的平移函数为:pcd.translate((tx, ty, tz), relative=True)。当relative为True时,(tx, ty, tz)表示点云平移的相对尺度,也就是平移了多少距离。当relative为False时,(tx, ty, tz)表示点云中心(质心)平移到的指定位置。质心可以坐标可以通过pcd.get_center()得到。 代码

    2024年01月22日
    浏览(68)
  • Open3d点云对象详解

    PointCloud 是open3d中用于点云处理的类,封装了包括几何变换、数据滤波、聚类分割等一系列实用算法。如无特别说明,本例中所有例程均基于斯坦福兔子的点云模型,下载地址:斯坦福标准模型 读取和清除点云 一般点云数据的读取方法属于 open3d.io 的内容,但点云类也提供了

    2023年04月19日
    浏览(74)
  • Open3D点云数据处理(一):VSCode配置python,并安装open3d教程

    专栏地址:https://blog.csdn.net/weixin_46098577/category_11392993.html 在很久很久以前,我写过这么一篇博客,讲的是open3d点云处理的基本方法。👇 当时是 PyCharm + Anaconda + python3.8 + open3d 0.13 已经是2023年了,现在有了全新版本。目前python由当年的3.8更新到了3.11版本,open3d也从0.13来到了

    2024年02月07日
    浏览(46)
  • Open3D 详解:点云裁剪实战

    Open3D 详解:点云裁剪实战 在进行点云处理时,经常需要对点云进行裁剪操作,以去除无用的噪点或仅保留感兴趣区域内的点云。Open3D 是一个广泛应用于三维数据处理的开源库,提供了简单易用的点云裁剪方法。 以下是一个基于 Open3D 的点云裁剪实战例程。首先,我们导入需

    2024年02月06日
    浏览(33)
  • open3d-点云读写和显示

    目录 一,点云读取 二,点云写入 二,点云显示 三、 open3d支持如下点云文件类型 ​四、代码及结果示例 参数: filename (str): 点云文件路径 format (str, optional, default=\\\'auto\\\'): 输入文件格式filehe的路径。 如果未指定或设置为“auto”,则从文件扩展名推断格式  remove_nan_points (bool,

    2024年02月04日
    浏览(29)
  • Open3D常用点云滤波

    在点云处理中,过密的点云需要下采样,离群点和噪声点需要去除,通过滤波的方法,可以抽稀点云,把离群点去除,以便进行下一步处理 open3d中,很多滤波器已经被封装成了对应的方法(源码是C++) 直通滤波过滤指定维度(x,y,z)内,指定值域外的点 下采样 首先根据输入

    2024年02月06日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包