农业采摘--RGBD数据转point cloud

一、RGBD图像转点云数据的步骤

将RGBD图像转点云数据常包含五个步骤:
1. 图像采集: 使用RGBD相机同时捕获颜色(RGB)和深度(Depth)信息。颜色记录了场景的彩色视觉信息,而深度图像记录了场景中每个像素点到相机的距离。

2. 获取相机内参: 相机内参是一组参数,描述了图像像素坐标到相机坐标系坐标中点的映射关系。它通常包含焦距(fx, fy)和光学中心(cx, cy)等参数,定义了一个3x3的矩阵。这些参数用于将2D图像坐标转换为3D相机坐标。

3. 深度图处理: 深度图中的像素值通常以16位或32位整数格式存储,表示每个像素点到相机的距离。这个距离需要转换成实际的物理单位(cm或m)。

4. 像素坐标到相机坐标的转换公式: 对于深度图中的每个非零像素(表示有效的深度信息),使用一下步骤转换为相机坐标系中的点:

X = (u - cx) * Z / fx #(u,v)表示图像坐标;(X,Y,Z)表示相机坐标
Y = (v - cy) * Z / fy
Z = Z  # 深度值已经以米为单位

5. 点云创建: 将转换后的三维坐标(X,Y,Z)与对应的RGB颜色值相结合,形成点云数据。每个点包括位置信息和颜色信息。

使用Open3D中的PointCloud类来存储所有点的位置和颜色信息。

二、 RGBD转Point Cloud的实例

"""
RGBD转Point Cloud数据
"""
import cv2
import open3d as o3d
import numpy as np# 相机内参(需要根据你的相机进行设置)
camera_intrinsics = np.array([[518.8579, 0, 325.1451],[0, 519.2371, 249.7019],[0, 0, 1]])# 读取RGB图像
rgb_image_path = "RGB图像存储路径"
rgb_image = cv2.imread(rgb_image_path)
rgb_image = cv2.cvtColor(rgb_image, cv2.COLOR_BGR2RGB)# 读取深度图像
depth_image_path = "Depth图像存储路径"
depth_image = cv2.imread(depth_image_path, cv2.IMREAD_UNCHANGED)# 转换深度图像为meters
depth_image = depth_image.astype(np.float32) / 1000.0  # 假设深度图像是以毫米为单位的# 创建点云
height, width = depth_image.shape
points = np.zeros((height, width, 3), dtype=np.float32)
colors = np.zeros((height, width, 3), dtype=np.float32)for v in range(height):for u in range(width):Z = depth_image[v, u]if Z == 0:continue  # 忽略深度为0的点X = (u - camera_intrinsics[0, 2]) * Z / camera_intrinsics[0, 0]Y = (v - camera_intrinsics[1, 2]) * Z / camera_intrinsics[1, 1]points[v, u] = [X, Y, Z]colors[v, u] = rgb_image[v, u] / 255.0  # 归一化颜色值# 将点云数据转换为Open3D格式
pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(points.reshape(-1, 3))
pcd.colors = o3d.utility.Vector3dVector(colors.reshape(-1, 3))# 保存点云为PLY文件
output_path = "创建的点云文件存储路径" #"\output_point_cloud.pcd"
o3d.io.write_point_cloud(output_path, pcd)print(f'点云已保存到 {output_path}')
"""
打开所创建的点云数据
"""
import open3d as o3d
import numpy as npprint("->正在加载点云... ")
pcd_path = "所创建的点云的存储路径"
pcd = o3d.io.read_point_cloud(pcd_path)
print(pcd)print("->正在可视化点云")
o3d.visualization.draw_geometries([pcd])

测试用例:
RGB图:
在这里插入图片描述
Depth图像
在这里插入图片描述
测试结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3227038.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

程序员学长 | PyCaret,一个超强的 python 库

本文来源公众号“程序员学长”,仅用于学术分享,侵权删,干货满满。 原文链接:PyCaret,一个超强的 python 库 今天给大家分享一个超强的 python 库,PyCaret。 https://github.com/pycaret/pycaret 简介 …

通过Umijs从0到1搭建一个React项目

有一阵时间没写react了,今天通过umi搭建一个demo项目复习一下react;umi是一个可扩展的企业级前端应用框架,在react市场中还是比较火的一个框架。 Umi官方文档:Umi 介绍 (umijs.org) 一、构建项目。 1、安装包管理工具。 官方推…

不入耳耳机哪个品牌好便宜学生、不入耳式蓝牙耳机推荐

开放式耳机相较于传统的入耳式耳机,极大地提升了用户的听觉享受和佩戴时的持久舒适度。然而,如何找到一款性价比高、品质优良的开放式耳机也是一个不小的问题。不入耳耳机哪个品牌好便宜学生?为了帮助大家更好地做出选择,我结合自…

Python爬虫:基础爬虫架构及爬取证券之星全站行情数据!

爬虫成长之路(一)里我们介绍了如何爬取证券之星网站上所有A股数据,主要涉及网页获取和页面解析的知识。爬虫成长之路(二)里我们介绍了如何获取代理IP并验证,涉及了多线程编程和数据存储的知识。此次我们将在…

在攻防演练中遇到的一个“有马蜂的蜜罐”

在攻防演练中遇到的一个“有马蜂的蜜罐” 有趣的结论,请一路看到文章结尾 在前几天的攻防演练中,我跟队友的气氛氛围都很好,有说有笑,恐怕也是全场话最多、笑最多的队伍了。 也是因为我们遇到了许多相当有趣的事情,其…

获取商铺信息,以及商铺信息的增删改查

本文章主要讲述如何对商铺信息进行基本的增删改查操作,及数据库对比。 1、获取首页仪表盘统计数据接口 待收费金额: SELECT count(1) as count,IFNULL(sum(total),0)as sum FROM payment_bill WHERE enabled_mark 1 AND pay_state0 欠费数据&#xf…

集群管理脚本

虚拟机集群管理脚本 文章目录 虚拟机集群管理脚本一、远程调用脚本(remote_call.sh)二、远程复制目录脚本(remote_copy.sh) 一、远程调用脚本(remote_call.sh) 如果有传命令参数,则执行该命令;如果没有传命令参数,则不执行。 #!/bin/bashcm…

[C++] 轻熟类和对象

类的定义 格式规范 class为定义类的关键字,后有类名,类的主体存于{}中;类定义结束时后面的分号不能省略;类体的内容成为类的成员,类中的变量成为成员变量,函数成为方法或成员函数;C兼容C语言的…

开发个人Go-ChatGPT--8 网站部署

开发个人Go-ChatGPT–8 网站部署 白嫖,白嫖,白嫖 平替 aliyun的收费服务, 白嫖,白嫖,白嫖, 以下功能全部白嫖。 Cloudflare 提供了许多便捷且免费的服务,以下是一些主要的免费功能: 免费且快…

递归 迷宫问题-java

1)findWay方法是为了找出走出迷宫的路径,找到返回true,否则返回false 2)(i,j)是老鼠的位置,初始化的位置为(1,1) 3)因为是递归找路&am…

echarts使用自定义图形实现3D柱状图

先看下效果吧 实现思路 使用graphic创建并注册自定义图形。根据每组的数据值,得到一个对应的点,从点出发用canvas绘制一组图形,分别为 顶部的菱形 const CubeTop echarts.graphic.extendShape({buildPath: function (ctx, shape) {const c1…

标签印刷检测,如何做到百分百准确?

印刷标签是一种用于标识、识别或包装产品的平面印刷制品。这些标签通常在纸张、塑料膜、金属箔等材料上印刷产品信息、条形码、图像或公司标识,以便于产品识别和管理。印刷标签有各种形状、尺寸和材质,可以根据具体需求进行定制设计。常见的印刷标签包括…

idea 插件市场,idea搜索不到lombok插件

https://plugins.jetbrains.com/plugin/6317-lombok/versions/stable

zabbix 学习笔记

文章目录 Zabbix 安装Ubuntu 18.04.1 server 安装Zabbix 4.0Centos7 安装Zabbix3.4Centos7 安装zabbix4.2Centos7.1908安装zabbix 基于ngixDebian11安装zabbix6.0LTS 基于PostgreSQL和NGINXAlmaLinux9.2使用国内清华源在线安装zabbix6.0.18LTS 基于MySQL和NGINXUbunut22.04使用…

中国光储充一体化行业:有望成为全球能源转型的重要驱动力

光储充一体化系统,又称微电网解决方案,系一种整合分布式光伏能源、用电负载管理、配电设施以及监控与保护设备的自给型能源供应体系。该系统核心组件包括光伏发电系统、储能装置及充电站,其工作原理为:光伏发电系统捕获太阳能并转…

vue3-openlayers WebGL加载地图(栅格切片、矢量切片)

本篇介绍一下使用vue3-openlayers WebGL加载地图(栅格切片、矢量切片) 1 需求 vue3-openlayers WebGL加载地图(栅格切片、矢量切片) 2 分析 栅格切片使用ol-webgl-tile-layer 矢量切片使用ol-vector-tile-layer(默…

mac安装配置cmake

本机是2015 macbook pro mid,已经有点老了,用homebrew下cmake老出问题 其实cmake官网安装也不麻烦 一、官网下载对应安装包 Download CMake 和所有dmg文件一样安装 二、改成命令行使用 一般来说 tutorial 给的都是命令行build 命令行的设置如下&am…

如何录制屏幕视频?4款软件,轻松录屏

在数字化飞速发展的时代,如何录制屏幕视频已经成为我们工作、学习和娱乐中不可省略的一个重要问题。无论是制作教学教程还是录制游戏视频等,屏幕视频录制都为我们提供了极大的便利。今天,就让我们一起探索如何录制屏幕视频的精彩方式&#xf…

商业合作方案撰写指南:让你的提案脱颖而出的秘诀

作为一名策划人,撰写一份商业合作方案需要细致的规划和清晰的表达。 它是一个综合性的过程,需要策划人具备市场洞察力、分析能力和创意思维。 以下是能够帮助你撰写一份有效的商业合作方案的关键步骤和要点: 明确合作目标:设定…

【Linux】进程(9):进程控制3(进程程序替换)

大家好,我是苏貝,本篇博客带大家了解Linux进程(9)进程控制1,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 目录 (A)什么是进程程序替换&#xf…