当前位置: 首页 > news >正文

深度图转换为点云文件脚本

步骤

1. 读取深度图像

  • 使用OpenCV读取16位深度图(假设输入是单通道的深度图,单位为毫米)。

  • cv2.IMREAD_UNCHANGED 确保保留原始数据精度(如16位)。

2. 相机内参设置

  • 内参被除以4,因为深度图的分辨率被缩小了4倍(如从高分辨率下采样到当前尺寸)。

  • 注意:如果图像未缩放,此操作会导致坐标计算错误。

3. 遍历像素生成点云

  • 坐标转换公式:将像素坐标 (u, v) 转换为相机坐标系下的3D点 (x, y, z)

  • 公式依据:根据相机模型,三维点 P(x, y, z)到像素坐标P_s的转换,如图所示:

转换公式为焦距放缩加上坐标系中心主点偏移:

u=f_x\frac{X}{Z}+c_x,v=f_y\frac{Y}{Z}+c_y

则反推为:

X=\frac{u-c_x}{f_x}Z,Y=\frac{v-c_y}{f_y}Z

4. 坐标轴变换与单位转换

  • 坐标轴重排:将相机坐标系的 (z, x, y) 转换为点云的 (x, y, z),可能意图调整坐标系朝向。

  • 单位转换:假设深度图单位为毫米,除以1000转换为米(常见于Kinect等设备)。

5. 生成并保存点云

代码实现

import cv2
import numpy as np
import open3d as o3ddepth_image = cv2.imread('C:/pyprojects/images/1112_0-rgb.png', cv2.IMREAD_UNCHANGED)if depth_image is None:print("fail")exit()# 相机内参(根据你的相机设置进行调整)
fx = 1085.76 # 焦距 x
fy = 1085.93  # 焦距 y
cx = 600.785  # 主点 x
cy = 496.776  # 主点 yheight, width = depth_image.shape
print("depth_image.shape  ", depth_image.shape)
points = []
for v in range(height):for u in range(width):z = depth_image[v, u]  # 获取深度值if z > 0:  # 过滤无效点x = (u - (cx/4)) * z / (fx/4)  y = (v - (cy/4)) * z / (fy/4)point_x = z / 1000.0point_y = x / 1000.0point_z = y / 1000.0# point_x = z # point_y = x # point_z = y points.append([point_x, point_y, point_z])points = np.array(points)
pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(points)
print("点云数量:", len(pcd.points))# o3d.visualization.draw_geometries([pcd])o3d.io.write_point_cloud("C:/pyprojects/depth_init.pcd", pcd)

初始深度图(已可视化):

点云展示(使用CloudCompare v2.13打开):

相关文章:

  • MFC 捕捉桌面存成jpg案例代码
  • DDR中Geardown Mode理解/2N模式理解
  • windows安装python环境
  • 项目执行中缺乏问题记录和总结,如何改进?
  • 【Java高阶面经:数据库篇】12. MySQL锁机制全解:从行锁到死锁优化的深度指南
  • 网络流量分析工具ntopng的安装与基本使用
  • 现代计算机图形学Games101入门笔记(十九)
  • 制造业ERP系统选型与实施避坑探讨
  • OneDrive登录,账号跳转问题
  • leetcode hot100刷题日记——8.合并区间
  • Java泛型详解 —— 出参入参绑定技巧
  • 唯创安全优化纸业车间安全环境:门口盲区预警报警器的应用与成效
  • Mariadb cpu 93% 问题
  • SpringBoot Web 入门
  • 线上问题排查
  • 年度工作计划总结述职报告PPT模版一组分享
  • 第19天-Python自动化生成PPT图文教程(基于python-pptx)
  • 5-码蹄集600题基础python篇
  • 人工智能解析:技术革命下的认知重构
  • C语言—Linux环境下CMake设置库(动态/静态)
  • 如何做彩票网站推广图/国际羽联最新排名
  • 自动做网页的网站/移动优化课主讲:夫唯老师
  • 宿州哪有做网站的/b站推广形式
  • 有哪些做短租的网站好/如何进行搜索引擎优化?