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

将3D检测的box框投影到BEV图片上

前言

点云数据作为一种丰富的三维空间信息表达方式,通常用于自动驾驶、机器人导航和三维建模等领域。然而,点云数据的直观性不如二维图像,这限制了它在一些需要快速视觉反馈的应用场景中的使用。本文将探讨如何将点云数据转换为二维图像,并介绍相关的技术和实践方法。

实现原理

将3D Box进行投影到图片上。

width, height = 480, 480
image = np.zeros((height, width, 3), dtype=np.uint8)dis_x_thresh =50
dis_y_thresh =40
# 遍历每个点,并在图像上绘制
for point in points:if abs(point[1]) < dis_y_thresh or point[0] > dis_x_thresh:x = (dis_y_thresh-point[1]) * width /(dis_y_thresh*2)  #此处的x对应于点云的yy = (dis_x_thresh-point[0]) * height /(dis_x_thresh*2)

代码实现

#获取3dbox检测框
def load_groundtruth(gt_file):with open(gt_file, "r") as hd:objects = json.load(hd)return objects
#获取检测框的角点
def get_obj_corners(obj):center = [obj["Center"]["CenterX"], obj["Center"]["CenterY"], obj["Center"]["CenterZ"]]size = [obj["Size"]["ObjectLength"], obj["Size"]["ObjectWidth"], obj["Size"]["ObjectHeight"]]yaw = obj["Yaw"]rot = np.asmatrix([[math.cos(yaw), -math.sin(yaw)],\[math.sin(yaw),  math.cos(yaw)]])plain_pts = np.asmatrix([[0.5 * size[0], 0.5*size[1]],\[0.5 * size[0], -0.5*size[1]],\[-0.5 * size[0], -0.5*size[1]],\[-0.5 * size[0], 0.5*size[1]]])tran_pts = np.asarray(rot * plain_pts.transpose())tran_pts = tran_pts.transpose()corners = np.arange(24).astype(np.float32).reshape(8, 3)for i in range(8):corners[i][0] = center[0] + tran_pts[i%4][0]corners[i][1] = center[1] + tran_pts[i%4][1]corners[i][2] = center[2] + (float(i >= 4) - 0.5) * size[2]return corners
#将3d box投影映射到Bev图片上。
for obj in objects:corners = get_obj_corners(obj)x1 = (dis_y_thresh-corners[0][1]) * width /(dis_y_thresh*2)y1 = (dis_x_thresh-corners[0][0]) * height /(dis_x_thresh*2)x2 = (dis_y_thresh-corners[1][1]) * width /(dis_y_thresh*2)y2 = (dis_x_thresh-corners[1][0]) * height /(dis_x_thresh*2)x3 = (dis_y_thresh-corners[2][1]) * width /(dis_y_thresh*2)y3 = (dis_x_thresh-corners[2][0]) * height /(dis_x_thresh*2)x4 = (dis_y_thresh-corners[3][1]) * width /(dis_y_thresh*2)y4 = (dis_x_thresh-corners[3][0]) * height /(dis_x_thresh*2)box = np.array([int(x1),int(y1),int(x2),int(y2),int(x3),int(y3),int(x4),int(y4)])boxs = box.reshape((-1,2))cv2.drawContours(image, [boxs], 0, (0, 255, 0), 2)

结果可视化

相关文章:

将3D检测的box框投影到BEV图片上

前言 点云数据作为一种丰富的三维空间信息表达方式&#xff0c;通常用于自动驾驶、机器人导航和三维建模等领域。然而&#xff0c;点云数据的直观性不如二维图像&#xff0c;这限制了它在一些需要快速视觉反馈的应用场景中的使用。本文将探讨如何将点云数据转换为二维图像&…...

Flutter 中的 ClipOval 小部件:全面指南

Flutter 中的 ClipOval 小部件&#xff1a;全面指南 在Flutter的丰富布局库中&#xff0c;ClipOval是一个用于裁剪子组件的显示区域为椭圆形或圆形的小部件。这种裁剪效果可以用于创建头像、图标或其他图形元素的美观边框。本文将提供ClipOval的全面指南&#xff0c;帮助你了解…...

ubuntu 硬盘转移

我插了两个 文件系统&#xff1a; ubuntu 硬盘转移&#xff1a; sudo dd if/dev/sdX1 of/dev/sdY1 bs128K convnoerror,sync statusprogressdd 的意思是DiskToDisk&#xff0c;if 是输入文件系统&#xff0c;of是输出文件系统。 bs是每次传递的数据大小。 注意&#xff1a;接…...

three.js中使用CameraHelper来可视化调整阴影相机的范围

1. three.js中使用CameraHelper来可视化调整阴影相机的范围 光源 const directionLight new THREE.DirectionalLight(0xffffff, 1); directionLight.position.set(100, 60, 20); directionLight.castShadow true; scene.add(directionLight);设置计算阴影的范围 direction…...

Golang发送GET请求并设置查询参数

服务端 package mainimport ("encoding/json""net/http""zdpgo_chi""zdpgo_chi/middleware" )func main() {r : zdpgo_chi.NewRouter()r.Use(middleware.RequestID)r.Use(middleware.RealIP)r.Use(middleware.Logger)r.Use(middlewar…...

c++笔记3

优先队列 普通的队列是一种先进先出的数据结构&#xff0c;元素在队列尾追加&#xff0c;而从队列头删除。优先队列是一种按照优先级决定出队顺序的数据结构&#xff0c;优先队列中的每个元素被赋予级别&#xff0c;队首元素的优先级最高。 例如&#xff1a;4入队&#xff0c…...

唠唠叨叨,每日进度

今天学了一个strcpy’的模拟实现&#xff0c;现在需要去写水课作业了&#xff0c;加油&#xff01;&#xff01;&#xff01;...

Vulhub——CAS 4.1、AppWeb、apisix

文章目录 一、Apereo CAS 4.1&#xff08;反序列化命令执行漏洞&#xff09;二、CVE-2018-8715&#xff08;AppWeb认证绕过漏洞&#xff09;三、apisix3.1 CVE-2020-13945(默认密钥漏洞&#xff09;3.2 CVE-2021-45232&#xff08;Dashboard API权限绕过导致RCE&#xff09; 一…...

Python Beautiful Soup 使用详解

大家好&#xff0c;在网络爬虫和数据抓取的领域中&#xff0c;Beautiful Soup 是一个备受推崇的 Python 库&#xff0c;它提供了强大而灵活的工具&#xff0c;帮助开发者轻松地解析 HTML 和 XML 文档&#xff0c;并从中提取所需的数据。本文将深入探讨 Beautiful Soup 的使用方…...

Java进阶学习笔记29——Math、System、Runtime

Math&#xff1a; 代表的是数学&#xff0c;是一个工具类&#xff0c;里面提供的都是对数据进行操作的一些静态方法。 示例代码&#xff1a; package cn.ensourced1_math;public class MathTest {public static void main(String[] args) {// 目标&#xff1a;了解Math类提供…...

TOTP 算法实现:双因素认证的基石(C/C++代码实现)

双因素认证&#xff08;Two-Factor Authentication, 2FA&#xff09;扮演着至关重要的角色。它像是一道额外的防线&#xff0c;确保即便密码被窃取&#xff0c;不法分子也难以轻易突破。在众多双因素认证技术中&#xff0c;基于时间的一次性密码&#xff08;Time-Based One-Tim…...

aws eks理解和使用podidentity为pod授权

参考链接 https://www.amazonaws.cn/new/2024/amazon-eks-introduces-eks-pod-identity/https://aws.amazon.com/cn/blogs/aws/amazon-eks-pod-identity-simplifies-iam-permissions-for-applications-on-amazon-eks-clusters/ 先决条件 集群版本需要符合要求&#xff0c;如果…...

面向可复用性和可维护性的设计模式 课程学习总结

什么是设计模式 设计模式&#xff1a;在软件设计中给定上下文中常见问题的通用的、可重用的解决方案。 设计模式分类 1. 创建型模式——Creational patterns 关注对象创建的过程 1.1 工厂方法模式 定义用于创建对象的接口&#xff0c;但让子类决定要实例化哪个类。工厂方…...

修复谷歌 AdSense 的 Ads.Txt 无效的有收益损失风险提示

明月的 AdSense 账号后台一直都有“有收益损失风险 - 您需要纠正 ads.txt 文件存在的一些问题&#xff0c;以免严重影响您的收入。”的提示长达一年多了&#xff0c;这次重新开始投放谷歌 AdSense 广告后感觉需要解决掉这个问题了&#xff0c;因为已经全站使用了 CloudFlare&am…...

使用向量叉乘,来计算一个点到一条线的距离

1. 使用向量叉乘&#xff0c;来计算一个点到一条线的距离 如果说一条线段的两个端点坐标分别是&#xff0c;A&#xff0c;B点&#xff0c;到线段外一点P的距离。 我们可以把&#xff0c;这三个点连接起来&#xff0c;得到一个三角形&#xff0c;此时的步骤就是这样的 计算这个…...

学习笔记——交通安全分析02

目录 前言 当天学习笔记整理 绪论 结束语 前言 #随着上一轮SPSS学习完成之后&#xff0c;本人又开始了新教材《交通安全分析》的学习 #整理过程不易&#xff0c;喜欢UP就点个免费的关注趴 当天学习笔记整理 绪论 美国在道路设施安全改善过程中&#xff0c;形成了数据基…...

pytest-sugar插件:对自动化测试用例加入进度条

摘要 在自动化测试过程中&#xff0c;测试进度的可视化对于开发者和测试工程师来说非常重要。本文将介绍如何使用pytest-sugar插件来为pytest测试用例添加进度条&#xff0c;从而提升测试的可读性和用户体验。 1. 引言 自动化测试是软件开发过程中不可或缺的一部分&#xff…...

AI大模型的口语练习APP

开发一个使用第三方大模型的口语练习APP涉及多个步骤&#xff0c;从需求分析到部署上线。以下是详细的开发流程和关键步骤&#xff0c;通过系统化的流程和合适的技术选型&#xff0c;可以有效地开发出一个功能丰富、用户体验良好的口语练习APP。北京木奇移动技术有限公司&#…...

Elasticsearch 详细介绍和经典应用

Elasticsearch是一个开源的分布式搜索和分析引擎&#xff0c;它建立在Apache Lucene搜索引擎库之上&#xff0c;提供了一个分布式、多租户的全文搜索引擎&#xff0c;能够实时地存储、检索和分析大规模的数据。以下是关于Elasticsearch的详细介绍和经典应用&#xff1a; 详细介…...

GEC210编译环境搭建

一、下载编译工具链 下载&#xff1a;点击跳转 二、解压到 /usr/local/arm 目录 sudo mv gec210.zip /usr/local/arm cd /usr/local/arm sudo unzip gec210.zip 三、添加到环境变量 PATH/usr/local/arm/arm-cortex_a8-linux-gnueabi-4.7.3/bin:$PATH 四、测试验证 在终端…...

单细胞测序实战:从原始数据到高质量细胞图谱的R/Seurat预处理全流程

1. 单细胞测序入门&#xff1a;为什么预处理如此重要&#xff1f; 第一次接触单细胞测序数据时&#xff0c;我盯着电脑屏幕上密密麻麻的基因表达矩阵发愣——这堆数字怎么就能变成漂亮的UMAP聚类图&#xff1f;后来才明白&#xff0c;数据预处理就是搭建这座桥梁的关键工序。简…...

OpenClaw多通道管理:千问3.5-9B同时服务飞书与钉钉机器人

OpenClaw多通道管理&#xff1a;千问3.5-9B同时服务飞书与钉钉机器人 1. 为什么需要多通道管理&#xff1f; 去年我接手了一个跨部门协作项目&#xff0c;团队同时使用飞书和钉钉两种沟通工具。每次需要查询数据或生成报告时&#xff0c;成员们要么在飞书群里我&#xff0c;要…...

STM32 RTC掉电也能走时?手把手教你用VBAT和LSE晶振搭建硬件时钟电路

STM32 RTC掉电也能走时&#xff1f;手把手教你用VBAT和LSE晶振搭建硬件时钟电路 嵌入式系统中实时时钟&#xff08;RTC&#xff09;的重要性不言而喻&#xff0c;它不仅是记录时间的工具&#xff0c;更是许多关键功能的基石。想象一下&#xff0c;当你的智能门锁因为断电而无法…...

【无标题】JAVA快速入门

JAVA快速入门 一、Java基础认知 Java是一门跨平台的面向对象编程语言&#xff0c;凭借“一次编写&#xff0c;到处运行”的特性稳居企业级开发首选语言行列&#xff0c;2024年随着JDK 23正式发布&#xff0c;新增的值类、模式匹配增强等特性进一步降低了入门门槛。 二、入门核心…...

别再只传明文了!SpringBoot若依框架接口Base64加解密避坑指南

若依框架接口安全升级&#xff1a;Base64编码传输的实战陷阱与解决方案 在前后端分离架构中&#xff0c;数据安全传输一直是开发者关注的焦点。最近接手一个金融类项目改造&#xff0c;客户明确要求所有接口数据必须经过编码处理。当我信心满满地准备用Base64方案快速实现时&am…...

Python主流框架全解析

以下是 Python 常用框架的分类解析&#xff1a;一、Web 开发框架1. Django定位&#xff1a;全能型框架&#xff0c;内置 ORM、模板引擎、路由系统等特点&#xff1a;开箱即用&#xff08;如自带后台管理、用户认证&#xff09;遵循 MVC 设计模式&#xff08;MTV 变体&#xff0…...

操作系统工程师成长:从兴趣到创新的四重境界

1. 操作系统工程师的成长路径&#xff1a;从兴趣到创新的四重境界在科技行业的金字塔尖&#xff0c;操作系统开发一直被视为"皇冠上的明珠"。作为一名在这个领域摸爬滚打二十余年的老兵&#xff0c;我见证了Linux从实验室玩具成长为数字世界基石的完整历程。每当年轻…...

Oracle 18c新特性实战:5分钟搞定DataGuard备库修复(附常见错误排查)

Oracle 18c DataGuard备库修复实战&#xff1a;从归档缺失到坏块处理的完整指南 凌晨三点&#xff0c;当手机铃声刺破夜空时&#xff0c;我知道又一个不眠之夜开始了。监控系统显示生产备库出现了47-55号归档缺失&#xff0c;而主库的归档日志早已被清理。传统解决方案需要手动…...

从零开始:在RK3588上运行RKNN版YOLOv5目标检测(保姆级教程)

从零开始&#xff1a;在RK3588上运行RKNN版YOLOv5目标检测&#xff08;保姆级教程&#xff09; RK3588作为Rockchip新一代旗舰级SoC&#xff0c;其内置的NPU模块为边缘计算场景提供了强大的AI推理能力。本教程将手把手带您完成YOLOv5目标检测模型在RK3588开发板上的完整部署流程…...

显示器EDID数据解析全攻略:从制造商ID到色彩特性的秘密

显示器EDID数据解析全攻略&#xff1a;从制造商ID到色彩特性的秘密 当你连接一台新显示器时&#xff0c;操作系统是如何知道它的最佳分辨率和刷新率的&#xff1f;答案就藏在EDID&#xff08;Extended Display Identification Data&#xff09;这个小小的数据块中。EDID是显示器…...