全网首发!!!opencv三通道Mat点云转halcon点云—HTuple类型

news2024/9/17 4:19:32

OpenCV三通道Mat点云转Halcon点云—HTuple类型的难点

在将OpenCV中的三通道Mat(通常用于存储图像数据,包括RGB三通道)转换为Halcon中的点云数据时,并直接转换为Halcon特有的HTuple类型(HTuple是Halcon中用于存储和处理数据的强大容器,可以包含多种类型的数据,如整数、浮点数、字符串等,并支持数组和动态数据结构),存在以下难点:

  1. 数据结构差异
    • OpenCV的Mat主要用于存储二维图像数据,其数据结构主要围绕像素的行列展开。
    • Halcon的点云数据通常包含三维坐标信息(x, y, z),并可能包含其他属性如颜色、强度等,这些数据需要以适当的方式组织在Halcon的数据结构中。
  2. 类型转换复杂性
    • 如果要将OpenCV的RGB图像转换为点云,首先需要将图像中的每个像素的RGB值转换为三维空间中的坐标(这通常不是直接转换,因为RGB仅代表颜色信息,不直接对应空间坐标)。
    • 若确实需要将颜色信息保留为点云属性,则需要在Halcon中创建相应的数据结构来存储这些信息,这涉及到复杂的类型转换和数据处理。
  3. HTuple的灵活性与复杂性
    • HTuple虽然功能强大且灵活,但使用它来处理点云数据(尤其是当点云数据量较大时)可能会增加编程的复杂性。
    • 需要编写额外的代码来遍历OpenCV的Mat数据,并将其转换为HTuple中适合的点云数据结构。

OpenCV与Halcon的各自优点

OpenCV的优点
  1. 开源与免费:OpenCV是开源的,可以免费使用和修改,非常适合学术界、研究机构和个人开发者使用。
  2. 丰富的功能:OpenCV提供了大量的计算机视觉算法和工具,包括图像处理、视频分析、目标检测、跟踪等。
  3. 多平台支持:OpenCV支持多种操作系统和编程语言,如Windows、Linux、macOS,以及C++、Python等。
  4. 社区支持:由于OpenCV的开源性质,其拥有庞大的社区支持,可以方便地获取帮助和教程。
Halcon的优点
  1. 高精度与高效性:Halcon在图像处理算法和技术方面相对更先进和复杂,能够实现更高精度的图像处理任务,并且处理速度相对较快,特别是对于大规模、高精度的图像处理任务。
  2. 工业级应用:Halcon被广泛应用于工业自动化、机器人视觉、医疗、安全监控等领域,具有高度的可靠性和稳定性。
  3. 丰富的工具和库:Halcon提供了丰富的图像处理和分析功能,如形状匹配、OCR、二维码识别等,并支持2D和3D图像处理、形状识别、特征提取、运动跟踪、三维重建等多种功能。
  4. 灵活的编程模式:Halcon支持多种编程语言,包括Halcon语言、C++、C#和Python等,并且可以在不同的操作系统和硬件平台上运行。
  5. 易于使用:Halcon的API相对简单,且提供了丰富的教程和文档,使得用户更容易上手和学习。

    代码如下:测试相机(中科融合

bool FrameData2HTupleMat2(const FrameData& tmp_frameData, const CameraParam& tmp_stCamParam, Mat& pointMat, HTuple& hv_ObjectModel3D)
{
    //可以去除——stata(这段是基于中科测试的)
	const auto point3D = tmp_frameData.point3D;
	const auto pointUV = tmp_frameData.pointUV;
	//int width = tmp_stCamParam.irWidth;
	//int height = tmp_stCamParam.irHeight;
	//int textureWidth = tmp_stCamParam.textureWidth;
	//int textureHeight = tmp_stCamParam.textureHeight;

	if (point3D == nullptr || pointUV == nullptr)
	{
		std::cout << "Input points or pointUV is nullptr." << std::endl;
		return false;
	}
    //可以去除——end
	/*int tmp_nHeight = pointMat.size().height;
	int tmp_nWidth = pointMat.size().width;
	int i = 0;*/
	//创建3通道f类型Mat
	cv::Mat3f tmp_mat3f_m;
	//除以1000将单位从mm转换为m
	cv::divide(pointMat, 1000.0, tmp_mat3f_m);
	//创建单通道数组三个
	cv::Mat1f imgs_array_m[3];
	//分割通道
	cv::split(tmp_mat3f_m, imgs_array_m);
	//获取单通道数组元素个数
	int tmp_num = imgs_array_m[0].total();
	//赋值过去HTuple
	HTuple a1(reinterpret_cast<float*>(imgs_array_m[0].data), tmp_num);
	HTuple a2(reinterpret_cast<float*>(imgs_array_m[1].data), tmp_num);
	HTuple a3(reinterpret_cast<float*>(imgs_array_m[2].data), tmp_num);
	//有一些没办法使用Htuple/1000
	//a1 = a1 / 1000;
	//a2 = a1 / 1000;
	//a3 = a1 / 1000;
	
	//重新合成点云
	GenObjectModel3dFromPoints(a1, a2, a3, &hv_ObjectModel3D);

	a1.Clear();
	a2.Clear();
	a3.Clear();
	return true;
};

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

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

相关文章

24程序员转行,首选为什么是它?

今天文章的主人公暂且称他为 A 君。不过 A 君有点特别&#xff0c;非科班&#xff0c;工作 10 年后才转行 iOS 程序员。今年 36 岁&#xff0c;目前在某行业头部企业任职前端负责人&#xff0c;管理 40 人的前端团队。 废话不多说&#xff0c;我们开始 A 君&#xff08;为了描…

包机制,javadoc生成文档,用户交互scanner

包机制 在建包时com.kuang直接建线性一条龙的文件只会显示一个外层包&#xff0c;当再建一个包时才会显示出两个包。 import com.kuang.base 导入包的时候在后面加入星号就能把包全导进来 javadoc生成文档 public class Doc {String name;/*** * param name* return* throw…

Python可视化集大成之作 - Seaborn 介绍

我今天要介绍一款让你在数据可视化中游刃有余的利器——Seaborn包。作为Python数据可视化库中的一员&#xff0c;Seaborn不仅美观易用&#xff0c;而且功能丰富&#xff0c;是生物信息学中数据探索的好帮手。 为什么选择Seaborn&#xff1f; 1. 美观简洁 Seaborn的默认主题和颜…

跨系统环境下LabVIEW程序稳定运行

在LabVIEW开发中&#xff0c;不同电脑的配置和操作系统&#xff08;如Win11与Win7&#xff09;可能对程序的稳定运行产生影响。为了确保程序在不同平台上都能正常且稳定运行&#xff0c;需要从兼容性、驱动、以及性能优化等多个方面入手。本文将详细介绍如何在不同系统环境下&a…

PMP–一、二、三模–分类–变更–技巧–敏捷变更

文章目录 技巧高频考点分析&#xff08;一、过程&#xff1b;二、人员&#xff09;一、过程&#xff1a;1.1 变更管理&#xff1a;1.1.1 瀑布型变更&#xff08;一次交付、尽量限制、确定性需求 &#xff1e;风险储备&#xff09;1.1.2 敏捷型变更&#xff08;多次交付、拥抱变…

mybatis框架基础以及自定义插件开发

文章目录 框架概览框架预览MyBatis框架的核心组件MyBatis框架的工作原理MyBatis框架的配置MyBatis框架的最佳实践 自定义插件开发1. 添加依赖2. 创建插件类3. 配置插件4. 启动类中注册插件5. 测试插件 参考文献 框架概览 MyBatis是一个优秀的持久层框架&#xff0c;它支持自定…

多个vue项目部署到nginx服务器

文章目录 需求一、项目打包1.vue.config.js2.request.js文件3.打包 二、nginx配置 需求 同一个域名安装多个vue项目。 比如&#xff1a;域名为 https://domain.com 后缀。那么通过不同的后缀就能去访问不同的项目地址。 https://domain.com&#xff0c;不加任何后缀&#x…

OBItools:Linux下的DNA条形码分析神器

在生物信息学领域&#xff0c;DNA条形码分析是一种非常常见的研究方法&#xff0c;用于物种鉴定、生态学和进化生物学研究。今天要介绍的工具就是专为此设计的——OBItools。这个工具集专门用于处理生态学和进化生物学中的DNA条形码数据&#xff0c;在Linux环境下运行。无论你是…

linux下进行lvm分区及扩容

目录 LVM存储管理介绍 lvm磁盘扩容有两种方式 创建lvm磁盘 1. 首先先加入第一块儿新的磁盘 2. 对新磁盘 /dev/sdb 进行分区 通过LVM命令创建新卷 1. 创建物理卷 2.创建卷组 并将物理卷加入其中 3. 创建逻辑卷并分配大小 4.格式化刚刚创建的硬盘 5. 挂载磁盘 扩容lvm…

《Web性能权威指南》-网络技术概览-读书笔记

注&#xff1a;TCP/IP等知识牵涉面太广&#xff0c;且不说本文&#xff0c;哪怕是原书&#xff0c;限于篇幅&#xff0c;很多知识点都是大致介绍下。如果想深入理解&#xff0c;需要更一步Google相关页面资料。 延迟与带宽 WPO&#xff0c;Web Performance Optimization&…

基于苹果Vision Pro的AI NeRF方案:MetalSplatter

随着苹果Vision Pro的发布,混合现实(Mixed Reality, MR)技术迎来了一个新的发展阶段。为了充分利用Vision Pro的潜力,一款名为MetalSplatter的Swift/Metal库应运而生,它允许开发者在Vision Pro上以全立体的方式体验捕捉内容。本文将详细介绍MetalSplatter的特点及其如何为…

Unity Post Process Unity后处理学习日志

Unity Post Process Unity后处理学习日志 在现代游戏开发中&#xff0c;后处理&#xff08;Post Processing&#xff09;技术已经成为提升游戏画面质量的关键工具。Unity的后处理栈&#xff08;Post Processing Stack&#xff09;是一个强大的插件&#xff0c;它允许开发者为游…

Matter.js:Web开发者的2D物理引擎

Matter.js&#xff1a;Web开发者的2D物理引擎 前言 在现代网页开发中&#xff0c;交互性和动态效果是提升用户体验的关键因素。 Matter.js&#xff0c;一个专为网页设计的2D物理引擎&#xff0c;为开发者提供了一种简单而强大的方式&#xff0c;来实现复杂的物理交互效果。 …

如何打造个性化大学生线上聊天交友系统?Java SpringBoot Vue教程,2025最新设计思路

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

流媒体与直播的基础理论(其一)

欢迎诸位来阅读在下的博文~ 在这里&#xff0c;在下会不定期发表一些浅薄的知识和经验&#xff0c;望诸位能与在下多多交流&#xff0c;共同努力 文章目录 一、流媒体简介二、流媒体协议常见的流媒体协议 三、视频直播原理与流程通用的视频直播模型视频直播链路 一、流媒体简介…

学习记录:js算法(二十七):重排链表、删除链表的倒数第 N 个结点

文章目录 重排链表我的思路网上思路 删除链表的倒数第 N 个结点我的思路网上思路 总结 重排链表 给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0 → L1 → … → Ln - 1 → Ln 请将其重新排列后变为&#xff1a; L0 → Ln → L1 → Ln - 1 → L2 …

oracle数据库安装和配置

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言&#xff1a; Oracle 数据库的安装和配置是一个较为复杂的过程&#xff0c;涉及多个步骤和配置项。以下将详细介绍如何在 Linux 和 Windows 系统中安装 Oracle 数据库并进行基础配置。 一、Oracle 数据库安装前的准备 …

结账打印--SAAS本地化及未来之窗行业应用跨平台架构

一代码 var 打印数据 {shopname:"广发系统"};var 打印渲染2 打印模板.解析(打印模板,打印数据x,"wlzc");console.log("未来之城");console.log(打印渲染2);var 对话框_打印_id "多大啥事";var 对话框_打印_内容 未来之窗_打印数据渲…

ICM20948 DMP代码详解(6)

接前一篇文章&#xff1a;ICM20948 DMP代码详解&#xff08;5&#xff09; 前一篇文章解析了EMP-App中的入口函数main()中重点关注的第1段代码&#xff0c;本回继续往下进行解析。为了便于理解和回顾&#xff0c;再次贴出main函数源码&#xff1a; int main (void) {int rc 0…

一次关于生产环境服务无故宕机的排查过程

故事的开始 这个故事是在一年之前&#xff0c;当时我们的系统运行在客户的k8s环境上。然后很神奇的是每个月底我们都会服务宕机&#xff0c;当然我们开启了多个实例。当时的容器线条就像心跳图一样&#xff08;或许有些描述的不太准确&#xff0c;我没有找到当时那个像心电图一…