根据像素坐标和深度图得到点云

语义分割predict之后得到labels文件夹里面的坐标是归一化的坐标,先将归一化的坐标转成像素坐标(x,y),然后像素坐标结合深度图(z值)就可以得到语义分割轮廓内的点云
1、读取和转换坐标:读取归一化的坐标并转换为像素坐标,将转换后的像素坐标保存到 save_pixel 文件夹中。
2、读取深度图和save_pixel像素坐标:使用转换后的像素坐标和深度图来生成点云。
3、生成和保存点云:根据轮廓内部的像素点生成点云并保存。

import os
import numpy as np
import open3d as o3d
import cv2# 设置图像的宽度和高度
image_width = 1280  # 根据实际图像的尺寸进行设置
image_height = 720  # 根据实际图像的尺寸进行设置# 设置文件夹路径
labels_folder = r"data/predict/labels"
pixel_folder = r"data/predict/save_pixel"
depth_folder = r"data/depth"
color_folder = r"data/rgb"  # 添加RGB图像的文件夹
output_folder = r"data/wuti_point"# 创建输出文件夹
os.makedirs(output_folder, exist_ok=True)# 遍历标签文件夹中的所有txt文件
for label_file in os.listdir(labels_folder):if label_file.endswith('.txt'):base_name = label_file.replace("_color.txt", "")depth_file = f"{base_name}_depth.png"pixel_file = f"{base_name}_color.txt"color_file = f"{base_name}_color.png"  # RGB图像文件名# 读取标签文件并转换为像素坐标input_path = os.path.join(labels_folder, label_file)output_path = os.path.join(pixel_folder, pixel_file)  # 修正了路径if not os.path.isfile(input_path):print(f"Label file not found: {input_path}")continue# 创建 pixel 文件夹,如果不存在的话os.makedirs(pixel_folder, exist_ok=True)with open(input_path, 'r') as infile, open(output_path, 'w') as outfile:lines = infile.readlines()for line in lines:values = line.split()class_id = values[0]normalized_coords = list(map(float, values[1:]))# 转换为实际像素坐标pixel_coords = []for i in range(0, len(normalized_coords), 2):x_pixel = normalized_coords[i] * image_widthy_pixel = normalized_coords[i + 1] * image_heightpixel_coords.append(f"{x_pixel:.2f}")pixel_coords.append(f"{y_pixel:.2f}")# 写入新的文件中outfile.write(f"{class_id} " + " ".join(pixel_coords) + "\n")# 读取深度图像depth_path = os.path.join(depth_folder, depth_file)if not os.path.isfile(depth_path):print(f"Depth file not found: {depth_path}")continuedepth_img = cv2.imread(depth_path, cv2.IMREAD_UNCHANGED)# 读取RGB图像color_path = os.path.join(color_folder, color_file)if not os.path.isfile(color_path):print(f"Color file not found: {color_path}")continuecolor_img = cv2.imread(color_path)# 确定对应的归一化坐标文件名pixel_path = os.path.join(pixel_folder, pixel_file)if not os.path.isfile(pixel_path):print(f"Corresponding pixel file not found for {depth_file}")continue# 读取像素坐标文件with open(pixel_path, 'r') as f:lines = f.readlines()# 提取轮廓点contour = []for line in lines:data = line.strip().split()x_coords = list(map(float, data[1::2]))y_coords = list(map(float, data[2::2]))for x, y in zip(x_coords, y_coords):contour.append([x, y])contour = np.array(contour, dtype=np.int32)# 创建一个空的点云列表points = []colors = []# 遍历图像中的每个像素for y in range(depth_img.shape[0]):for x in range(depth_img.shape[1]):# 检查该像素是否在轮廓内部或边缘if cv2.pointPolygonTest(contour, (x, y), False) >= 0:z = depth_img[y, x]if z > 0:  # 忽略无效深度值points.append([x, y, z])# 获取颜色并进行归一化bgr_color = color_img[y, x]  # OpenCV使用BGR格式rgb_color = bgr_color[::-1]  # 转换为RGB格式colors.append(np.array(rgb_color) / 255.0)  # 归一化颜色# 保存带有颜色的点云if points:point_cloud = o3d.geometry.PointCloud()point_cloud.points = o3d.utility.Vector3dVector(np.array(points))point_cloud.colors = o3d.utility.Vector3dVector(np.array(colors))output_path = os.path.join(output_folder, f"{base_name}_pointcloud.ply")o3d.io.write_point_cloud(output_path, point_cloud)print(f"Point cloud saved: {output_path}")else:print(f"No valid points found for {depth_file}")print("Point cloud generation complete.")

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

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

相关文章

SpringCloud微服务实现服务熔断的实践指南

Spring Cloud是一套分布式系统的微服务框架,它提供了一系列的组件和工具,能够使我们更容易地构建和管理微服务架构。在实际开发中,由于各个服务之间的通信依赖,一旦某个服务出现故障或负载过高,可能会导致整个系统的性…

百度飞浆Paddle OCR检测和识别【OCR数据收集、标注、数据集划分、检测识别模型训练、导出模型】

文章目录 前言一、OCR数据集采集二、OCR数据标注三、划分数据集四、数据训练五、导出模型 前言 1、我的电脑没有GPU,如果不使用AI Studio训练的话,第一遍我是按照CPU进行环境配置和训练的,可以参考这篇文章,我按着弄了一遍&#…

深度学习(一)——CMC特刊推荐

点击蓝字 关注我们 特刊征稿 01 期刊名称: Multimedia Security in Deep Learning 截止时间: 提交截止日期:2024年9月30日 目标及范围: 题为“深度学习中的多媒体安全”的特刊是一个平台,旨在推动深度学习在多媒体安全领域的创…

山体滑坡检测系统源码分享

山体滑坡检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

(黑马点评)八、实现签到统计和uv统计

8.1 签到统计系列功能 8.1.1 认识BitMap结构 BitMap是Redis基于String实现的一种高效的二进制数位的数据结构。因此一个BItMap的最大上线为512M,转为bit位可表示 2^32位 常见命令 SETBIT:向指定位置(offset)存入一个0或1 GETBIT …

CST软件超表面---电容或变容二极管调焦反射镜

可变焦的超表面(focus tunable metasurface)类型反射镜具有超薄、智能可控等特点,可用于成像、显微等应用。而且经常有朋友问如何用电容或二极管调控超材料,这期我们就用个简单的案例看看调控效果。 1. 单元仿真 单元尺寸我们用1…

【原创教程】电气电工20:一文弄透电气电工辅材

电气电工这些知识点,我们描述的比较细,虽然看起来比较简单,但是它是后面我们技能提升的基础,如果我们后面学电气工程师相关知识,这些都属于基本功。 接着我们来看一下电气辅材。 电气辅材定义: 电气辅材是指与电气设备固有的元器件配套使用的配件和器具。常见的电气辅…

Python “函数” ——Python面试100道实战题目练习,巩固知识、检查技术、成功就业

本文主要是作为Python中函数的一些题目,方便学习完Python的函数之后进行一些知识检验,感兴趣的小伙伴可以试一试,含选择题、判断题、实战题、填空题,答案在第五章。 在做题之前可以先学习或者温习一下Python的函数,推荐…

构建高效用户中心的技术方案

一、架构设计 在设计用户中心时,首先要考虑其架构。推荐采用微服务架构,这样可以将不同功能模块独立开来,便于后期维护和扩展。例如,可以将用户注册、登录、信息管理、权限控制等功能分为不同的服务模块。 二、前端开发 前端是…

【2022工业图像异常检测文献】PatchCore

Towards Total Recall in Industrial Anomaly Detection 1、Background 工业图像异常检测主要解决 冷启动问题 ,即仅使用正常(无缺陷)样本图像来训练模型。 现有的关于冷启动工业视觉异常检测的工作依赖于通过自编码方法、生成对抗网络或其…

高速CT滑环的特点分析

高速CT滑环在现代成像技术中发挥着至关重要的作用,尤其是在医学成像设备和工业检测系统中。这种滑环不仅满足高速旋转的需求,还确保了信号和电力的稳定传输。本文将详细分析高速CT滑环的主要特点及其应用优势。 高速CT滑环的第一个特点是其高传输速率。…

101. 对称二叉树【同时遍历两棵树】【C++】

题目描述 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true 示例 2: 输入:root [1,2,2,null,3,null,3] 输出:false 提示: …

Flet内置图标库ft.icons的图标如何使用庖丁解牛深度解读讲解,源代码IDE运行和调试通过

序言 Flet内置图标库图标丰富多彩、包罗万象。flet内置图标库指ft.icons图标库。使用Flet框架编写程序和项目,就要使用 Flet 内置图标库图标。使用 Flet 内置图标库的图标好处很多。 具体说有以下好处: 便捷性:无需额外寻找和下载图标资源&…

「OC」present和push操作区别以及混合推出的实现

「OC」present和push操作区别以及混合推出的实现 文章目录 「OC」present和push操作区别以及混合推出的实现前言present用途while循环越级返回通知越级返回添加present动画 push模态视图和push视图混合跳转操作一:控制器Apresent控制器B,控制器B再将控制…

影视会员充值api?接口对接需要做哪些准备工作?

影视会员充值 API 接口对接主要有以下步骤: 1.前期准备 明确自身需求:确定你希望通过 API 接口实现的功能,例如支持哪些影视平台的会员充值、是否需要获取会员信息、是否需要订单查询功能等。选择合适的 API 提供商:官方视频平台…

中国电子学会202312青少年软件编程(Python)等级考试试卷(三级)真题

2023年12月青少年软件编程Python等级考试(三级)真题试卷 题目总数:38 总分数:100 一、选择题 第 1 题 单选题 一个非零的二进制正整数,在其末尾添加两个“0”,则该新数将是原数的?( ) A.10倍 B.2倍 C.4倍 D.8倍 第 2 题 单选题 2023年亚运会将在杭…

分步指南:如何使用 ChatGPT 撰写文献综述

撰写文献综述对于研究人员和学生来说,往往是一项既耗时又复杂的任务。这一过程不仅要求对所选主题的现有研究进行全面的了解和掌握,还需要学术严谨性。然而,随着像 ChatGPT 这样的高级语言模型的广泛应用,撰写文献综述的过程变得更加高效和简化。通过合理利用 ChatGPT,研究…

跨国公司决策的影响与中国IT产业的应对

跨国公司在华研发中心的调整是一个复杂的现象,它可能受到多种因素的影响,包括全球经济环境的变化、成本考量、战略重心的转移以及地缘政治因素等。IBM中国研发中心的撤出可能会对中国IT行业造成短期的就业压力,加速人才流动,并促使…

【LeetCode】每日一题 2024_9_20 统计特殊整数(数位 DP)

前言 每天和你一起刷 LeetCode 每日一题~ LeetCode 启动! 题目:统计特殊整数 代码与解题思路 func countSpecialNumbers(n int) int { // 今天的题目是数位 DP,我不会做,所以现场学习了一下灵神的数位 DP 模版s : strconv.Itoa…

轻松打造:用Python实现手机与电脑间的简易消息系统

展示🎥 观看视频:👀,这是之前完成的一个项目,但今天我们的重点不是这个哦。 告别往昔,启航新篇章 现象🌟 智能互动:📱 我们每天都在享受与智能设备的互动,…