Halcon变量控制类型、数据类型转换、字符串格式化、元组操作

*变量控制类型:

Halcon的基础控制类型共5种:string(字符串)、integer(整数)、real(实数/小数)、tuple(元组)、handle(句柄)

数据类型核心特性总结 :
1. 弱类型语言:Halcon无需声明变量类型,赋值即定义,自动识别类型
2. 类型兼容:整数可以自动转为实数,反之需要强制转换(tuple_real())
3. 元组万能:所有变量都是元组,元组可以嵌套元组,支持所有运算/操作

*// ===================== Halcon 五大核心数据类型 ===================== *// Halcon的基础控制类型共5种:string(字符串)、integer(整数)、real(实数/小数)、tuple(元组)、handle(句柄) *// -------------------- 1. string 字符串类型:单引号包裹 -------------------- str := '哈工大' address := '经开第十六大街' str_mix := 'Halcon字符串:123abc视觉' *// -------------------- 2. integer 整数类型:正整数/负整数/0,无小数位 -------------------- num := 123 count := 100 sumAdd := 5050 int_neg := -99 int_zero := 0 *// -------------------- 3. real 实数/浮点型:带小数位的数值,支持科学计数法 -------------------- pai := 3.14 score := 95.5 *// 高精度小数 real_precise := 3.1415926535 *// 科学计数法,等效 123000.0 real_science := 1.23e5 *// -------------------- 4. handle 句柄类型:【核心】资源标识,本质是内存地址的整型映射 *// 句柄用途:标识窗口、图像、区域、XLD、文件、算子等系统资源,Halcon中最常用的是 窗口句柄/图像句柄 *// 特点:句柄是「独占资源」,使用完建议释放,避免内存泄漏;句柄变量命名规范:xxxHandle *// 创建主窗口,返回窗口句柄WindowHandle dev_open_window (0, 0, 800, 600, 'black', WindowHandle) *// -------------------- 5. tuple 元组类型:【Halcon灵魂】最核心、最常用的复合类型,重中之重 *// tuple 可以存储【所有类型】:整数、实数、字符串、句柄,支持「混合类型存储」,无类型限制 *// tuple 表示形式:必须用 [] 包裹,元素用逗号分隔;可以是空元组 [],也可以是单元素/多元素/混合元素 *// tuple 特性:Halcon中「所有变量本质都是元组」,单个数值/字符串本质是【长度为1的元组】 *// 混合类型元组(整数+实数+字符串+窗口句柄) arr := [1,3,5,3.14,11,'abc','你好',WindowHandle] *// 纯整数元组 tuple_int := [10,20,30,40] *// 纯字符串元组 tuple_str := ['哈工大','中国','Halcon'] *// 长度为1的元组,等效 real类型变量 tuple_single := [99.9] *// 空元组 tuple_empty := [] *// ===================== 数据类型核心特性总结 ===================== *// 1. 弱类型语言:Halcon无需声明变量类型,赋值即定义,自动识别类型 *// 2. 类型兼容:整数可以自动转为实数,反之需要强制转换(tuple_real()) *// 3. 元组万能:所有变量都是元组,元组可以嵌套元组,支持所有运算/操作

*数据类型转换:

*// Halcon数据类型转换 *// 把实型(real)转换成整型int) *// 规则:int()函数为 截断取整(直接舍弃小数部分,非四舍五入) *// 如需四舍五入用round() real01:= 3.14 real01_2:= 3.99 int01 := int(real01)// 截断取整 → 结果:3(非4) int01_round := round(real01_2)// 四舍五入取整 → 结果:4 *// 把整型转换成实型 int02 := 123 *// real() real02 := real(int02)// 结果:123.0(实型) *// 把整型(int)转换成字符串(string) *// 可以使用字符串拼接方式 int03:= 119 str01 := int03 + '' *// 把实型转换成字符串类型 real03 := 3.14 str02:= real03 + ''

*字符串格式化:

*// Halcon数据类型格式化 *// 字符串格式化: //--------------------- *// 语法:数值$'.Nf'(N为保留的小数位数,超出部分四舍五入,不足补0) score:=160.61 score1:=score$'.1f'//160.6 score2:=score$'.2f'//160.61 *// 整数,默认采用的是十进制形式 *// 二进制 八进制 十进制 十六进制 *// 二进制 不 支持//--------------------- *// 八进制://--------------------- *// 语法:数值$'0No'(N为目标长度,o表示八进制) *// 语法:#o → 带0前缀的八进制;单纯'o' → 无前缀 *// 如果位数不够,左边补零,小于等于位数,没有变化 num02 := 8$'#o'// 十进制8→八进制10,带0前缀 → 结果:"010" num02_2 := 8$'o'// 无前缀八进制 → 结果:"10" num02_3 := 8$'03o'// 3位八进制,补零 → 结果:"010" num02_4 := 10$'02o'// 十进制10→八进制12,刚好2位 → 结果:"12" *// 十进制://--------------------- *// 语法:数值$'0Nd'(N为目标长度,d表示十进制) *// 如果位数不够,左边补零,小于等于位数,没有变化 num:=2 num2:=20 num1:=num$'02d'//02 num3:=num2$'02d'//20 *// 十六进制://--------------------- *// 语法:数值$'0Nx'/$'0NX'(N为目标长度,x/X表示十六进制) *// 单纯x/X → 无前缀 *// 如果位数不够,左边补零,小于等于位数,没有变化 num03 := 16$'#x'// 十进制16→十六进制10,小写前缀 → 结果:"0x10" num03_2 := 16$'#X'// 大写前缀 → 结果:"0X10" num03_3 := 16$'x'// 无前缀小写 → 结果:"10" num03_4 := 16$'03x' // 3位十六进制,补零 → 结果:"010" num03_5 := 17$'02X'// 十进制17→十六进制11,刚好2位 → 结果:"11" *// 对于小数类型来说,#f,默认保留6位//--------------------- *// 如果不够6位自动补零,超出会四舍五入 f3 := 1.3$'#f'// 1.3→保留6位小数,补0 → 结果:"1.300000" f3_2 := 1.3456789$'#f'// 超出6位,四舍五入 → 结果:"1.345679" *// 让数字保留6位有效数字,#g,不够补零 //--------------------- *// 如果超出采用科学计数法 *// '1.23457e+08'= 1.23457 *10^8 f4 := 123456789$'#g'// 有效数字超6位,科学计数法 → 结果:"1.23457e+08" f5 := 1234$'#g'// 有效数字≤6位,常规格式+补0 → 结果:"1234.00" f5_2 := 1.23$'#g'// 有效数字3位,补0至6位 → 结果:"1.23000" *// 数字转换成字符串后文本对齐//--------------------- *// 正数=右对齐,负数=左对齐 *// 位数不够,补空格,小于等于位数,没有变化 f6 := 12345$'4'// 右对齐,12345(5位)>4位 → 结果:"12345"(无变化) f6_2 := 123$'4'// 右对齐,123(3位)<4位 → 补空格 → 结果:" 123" f7 := 12345$'-4'// 左对齐,12345>4位 → 结果:"12345" f7_2 := 123$'-4'// 左对齐,123<4位 → 补空格 → 结果:"123 " *// $'.数字' 如果位数不够,左边补零,小于等于位数,没有变化//--------------------- f8 := 123$'.4'//0123

*元组操作:

•元组对位相加:tuple_add ()
•元组对位相减:tuple_sub()
•元组对位相除:tuple_div()
•元组对位趋于:tuple_mod ()
•插入元素:tuple_insert()
•删除元素:tuple_remove()
•替换元素:tuple_remove ()
•查找元素:tuple_find_first()
•取前 N 个元素值 :tuple_first_n ()
•取指定索引位置的元素 :tuple_select ()
•去重:tuple_uniq ()
•元祖升序排序:tuple_sort()
•元组元素随机打乱:tuple_shuffle()
•元组中的元素位置翻转:tuple_inverse()
•元组中元素的类型判断:tuple_is_int()
•判断某个元素是否指定类型:tuple_is_int_elem()
•判断元组的元素是否是数字类:tuple_is_number()
•最大值:tuple_max()
•最小值:tuple_min()
•元祖元素长度(个数):tuple_length ()
•|元祖名称|--->个数:变量名称 := |元组名称|
•平均值:tuple_mean ()
•中值:tuple_median ()
•绝对值:tuple_abs ()
•向上取整:tuple_ceil ()
•向下取整:tuple_floor ()
•合并两个元组:tuple_concat ()
•并集运算:tuple_union()
•交集运算 :tuple_intersection ()
•差集运算:tuple_difference()
•补集运算 :tuple_symmdiff ()
•清除窗口:dev_clear_window ()
•展示文本:dev_disp_text()
*// Halcon元组核心操作(增删改查+运算+特殊操作) Tuple1 :=[1,3,5,10,20,100] Tuple2 :=[10,20,30,40,50,60] *// 数值运算: *// 规则:对应索引元素相加,若长度不同,短元组末尾补0后相加 *// 元组对位相加 tuple_add (Tuple1, Tuple2, Sum) *// 元组对位相减 tuple_sub (Tuple1, Tuple2, Sub) *// 元组对位相除 tuple_div (Tuple1, Tuple2, Div) *// 元组对位取余 tuple_mod (Tuple1, Tuple2, Mod) *// 增:插入元素 * tuple_insert(原元组, 插入位置(索引从0开始), 插入值(单值/元组), 输出元组) * 在指定位置(多个位置不允许)可以插入单个或者一个元祖数据 tuple_insert (Tuple1, 0, 110, Extended)//[110,1,3,5,10,20,100] tuple_insert (Extended, 0, [11,22,33], Extended1)//[11,22,33,110,1,3,5,10,20,100] *// 删:删除元素,删除指定位置(多个位置支持)的元素值//--------------------- * tuple_remove(原元组, 删除位置(单/多索引), 输出元组) * 规则:多位置删除时,Halcon会自动按索引从大到小删 tuple_remove (Extended1, [0,2], Reduced)//[22,110,1,3,5,10,20,100] *// 改:替换元素,修改指定位置(多个位置支持)的元素值//--------------------- * tuple_replace(原元组, 替换位置(单/多索引), 替换值(单/多值), 输出元组) * 规则:替换位置数量 = 替换值数量(多值时一一对应) tuple_replace (Reduced, [2,3,4], [19,29,39], Replaced)//[22,110,19,29,39,10,20,100] *// 查:查找元素 如果没有找到返回-1//--------------------- Tuple3 := ['张三','李四','王五','赵六','小四','张三','赵六','张三'] * 查找张三元素第一次出现的位置 0 tuple_find_first (Tuple3, '张三', Index) * 查找张三元素最后一次出现的位置 7 tuple_find_last (Tuple3, '张三',Index2) *// 取前 N 个元素值 返回一个元组,参数 2 为 N(数量),代表从索引 0 开始的前 N 个元素 tuple_first_n (Tuple3, 2, Selected)//['张三','李四'] * 取指定索引位置的元素 返回一个元组,参数 2 为索引列表(单 / 多索引),仅返回对应索引的元素 tuple_select (Tuple3, [0,2,4], Selected2)//['张三','王五','小四'] *// 去重:仅去除连续的重复元素, 保留第一个//--------------------- Tuple4 := ['张三','张三','张三','张三','李四','王五','赵六','小四','张三','赵六','张三'] tuple_uniq (Tuple4, Uniq) *// 特殊操作:排序/打乱/翻转/类型判断//--------------------- Tuple5 := [1,3,100,30,50,20,80,60,40] *// 元祖升序排序 tuple_sort (Tuple5, Sorted) *// 元组元素随机打乱 tuple_shuffle (Sorted, Shuffled) *// 元组中的元素位置翻转 tuple_inverse (Shuffled, Inverted) *// 元组中元素的类型判断 1-true 0-false tuple_is_int (Inverted, IsInt)//1 Tuple6 := [3.14,5.67,9.5] tuple_is_int (Tuple6, IsInt2)//0 *// 判断某个元素是否指定类型 * tuple is int/real/string/handle elem 判断元素是否为整数/小数/字符串/句柄 tuple_is_int_elem (123.0, IsInt3)//0 *// 判断元组的元素是否是数字类 tuple_is_number (Tuple4, IsNumber) dev_get_window (WindowHandle) *// 判断单个元素是否为句柄 tuple_is_handle_elem (WindowHandle, IsHandle) *// 特征值获取:最值/长度/平均值/中值//--------------------- *// 最值:最大值、最小值 tuple_max (Tuple5, Max) tuple_min (Tuple5, Min) *// 元祖元素长度(个数) tuple_length (Tuple5, Length) *// |元祖名称|--->个数 length1 := |Tuple5| *// 平均值 tuple_mean (Tuple5, Mean) *// 中值 tuple_median (Tuple5, Median) *// 绝对值 tuple_abs (Median, Abs) *// 向上取整 tuple_ceil (Abs, Ceil) *// 向下取整 tuple_floor (Ceil, Floor) *// 查找包含有元素的本地函数//--------------------- *// find(元祖,目标值)返回是目标值在元祖的索引位置 result1 := find(Tuple5, 100) *// sum()求和 Tuple6:=[1,2,3] sumAdd := sum(Tuple6) *// 元祖切片操作连续操作//--------------------- *// 定义一个元祖 值包含从1到100 Tuple7:= [1:100]// 1到100,步长1 *// 定义元祖 还可以设置步长 Tuple8 := [3:2:100]// 3到100,步长2 Tuple9:=[100:-2:-100] // 100到-100,步长-2 *// 元祖集合运算 交并补差//--------------------- Tuple10 := [1,3,5,7,9,11,13,15] Tuple11 := [1,2,3,4,5,7,8,9,10] *// 元组元素拼接 合并两个元组不去重 tuple_concat (Tuple11, Tuple11, Concat) *// 并集运算 合并去重 tuple_union (Tuple10, Tuple11, Union) *// 交集运算 提取两个元祖中相同的元素 tuple_intersection (Tuple10, Tuple11, Intersection) *// 差集运算 求第一个元祖中存在但是在第二个元祖中没有的元素 tuple_difference (Tuple10, Tuple11, Difference) *// 补集运算 获取的是双方在对方当中都不存在的元素(交集的反集) *// 对称差集 等价于 并集 - 交集 tuple_symmdiff (Tuple10, Tuple11, SymmDiff)

希望对大家有所帮助, 感谢大家的关注和点赞。

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

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

相关文章

基于Python+Django的车辆检测服务中心管理系统设计与实现

前言 &#x1f31e;博主介绍&#xff1a;✌CSDN特邀作者、全栈领域优质创作者、10年IT从业经验、码云/掘金/知乎/B站/华为云/阿里云等平台优质作者、专注于Java、小程序/APP、python、大数据等技术领域和毕业项目实战&#xff0c;以及程序定制化开发、文档编写、答疑辅导等。✌…

nvm下载安装教程(node.js 下载安装教程)

前言 nvm 官网地址&#xff1a;https://nvm.uihtm.com nvm 是一个 node.js 的版本管理工具&#xff0c;相比于仅安装 node.js&#xff0c;我们可以使用 nvm 直接下载或卸载 node.js&#xff0c;可以同时安装多个 node.js 版本&#xff0c;并动态的切换本地环境中的 node.js 环…

nodejs链接redis

本篇文章介绍nodejs连接redis&#xff0c;以及redis的基本使用。安装redis。 cnpm i redis -S封装redis配置信息。config/db.js// redis 配置 let REDIS_CONF // 开发环境 if (env dev) {REDIS_CONF {port: 6639,host: 127.0.0.1} } // 生产环境 if (env production) {REDIS…

FS2流式处理中的异常处理与流畅设计

在使用FS2进行流式处理时,处理异常是保证流不被中断的一个关键点。让我们探讨如何在FS2中设计流处理逻辑以确保即使发生异常,流仍然可以继续运行,并结合实例进行说明。 背景介绍 在之前的代码中,我们定义了一个简单的学生信息处理流,它从一个包含学生ID的流开始,通过查…

系统学习ssd1306显示控制流程图解

深入理解SSD1306&#xff1a;从初始化到显示控制的完整路径你有没有遇到过这样的情况&#xff1f;电路接好了&#xff0c;代码烧录了&#xff0c;STM32或ESP32也跑起来了&#xff0c;可那块小小的OLED屏幕就是不亮&#xff0c;或者显示乱码、闪烁不定。更糟的是&#xff0c;数据…

揭秘曲线上的点:Python中的插值技巧

在数据科学和科学计算中,插值是一种常用的方法,用于估算已知数据点之间的值。在本文中,我们将探讨如何使用Python的scipy库来实现二维函数的插值,结合实际例子来展示其应用。 背景介绍 假设我们有一个已知的二维函数 f(x, y),其在某些点 (x, y) 上的值已经计算好。同时,…

Node.js(v16.13.2版本)安装及环境配置教程

一、进入官网地址下载安装包 https://nodejs.org/zh-cn/download/ 选择对应你系统的Node.js版本&#xff0c;这里我选择的是Windows系统、64位&#xff08;v16.13.2版本&#xff09; 下载后的zip文件 二、解压文件到nodejs&#xff0c;并打开文件夹nodejs&#xff0c;复制解压…

Nginx环境安装

一、官网地址 Nginx官网&#xff1a;http://nginx.org/ Nginx中文网&#xff1a;https://nginx.p2hp.com/ 二、Nginx版本 mainline version 开发版本stableversion 稳定版本legacy version 历史版本 三、Windows系统安装Nginx 第一步&#xff1a;选择Windows版本&#xff0c;…

在GIS中使用ggplot2绘制坐标点和Shapefile

在地理信息系统(GIS)中,常见的一个需求是将坐标点绘制在地图上。这不仅可以帮助我们可视化数据分布,也能对数据进行空间分析。本文将通过一个具体的实例,展示如何在R语言中使用ggplot2包结合sf包,将坐标数据点绘制在Shapefile之上。 背景介绍 假设我们有以下情况: 坐标…

LCD12864模块使用教程:零基础项目应用

从零开始玩转LCD12864&#xff1a;嵌入式开发中的“老派但靠谱”显示方案你有没有遇到过这样的场景&#xff1f;手里的单片机项目已经能采集传感器数据、执行控制逻辑&#xff0c;甚至还能通过串口把信息发给电脑——但一旦脱离上位机&#xff0c;设备就像个“哑巴”&#xff0…

Nginx权限问题详解及解决方案

一、前言 在运行Nginx服务器时&#xff0c;权限问题是一个常见的困扰&#xff0c;尤其是在Linux环境下。权限配置不当可能导致Nginx无法启动、无法访问某些目录或文件&#xff0c;甚至影响到网站的正常运行。本文将深入探讨Nginx权限问题的原因&#xff0c;并提供有效的解决方案…

Excel数据透视表:如何显示未使用的数据验证列表项

在Excel中&#xff0c;数据透视表是强大的数据分析工具&#xff0c;能够快速汇总和分析大量数据。然而&#xff0c;当你试图在数据透视表中显示一个包含未使用项目的数据验证列表时&#xff0c;可能会遇到一些挑战。本文将详细介绍如何在数据透视表中显示所有可能的项目&#x…

Node.js看我的就行了!!!

#最近nodejs崩了好多次&#xff0c;所以我决定重装。由于没有卸载干净&#xff0c;折腾了我两天# 终于&#xff0c;我今天下午装好了 我们从卸载开始(没有安装的小伙伴直接到第二步) 一、卸载node.js Windows系统彻底卸载 nodejs 1. 开始菜单中搜索node&#xff0c;找到并…

Nginx搭建负载均衡

Nginx搭建负载均衡 引言 在当今互联网时代&#xff0c;网站和应用的可用性、可靠性和性能至关重要。随着流量的增加&#xff0c;单一服务器往往难以承载所有请求&#xff0c;从而导致性能瓶颈。负载均衡&#xff08;Load Balancing&#xff09;是一种将流量分散至多台服务器的技…

Git命令补全优化:解决分支名称冲突

在日常的Git操作中,利用Tab键进行命令补全是一个非常方便的功能。例如,当我们输入git switch de并按下Tab键时,如果存在多个以"de"开头的分支(如develop和dev-1234),命令补全会停止在git switch dev。即使我们删除了dev-1234分支,补全功能仍然会因为之前的存在…

AD中从电路图到PCB的设计流程:系统学习篇

从原理图到PCB&#xff1a;在Altium Designer中构建可靠硬件设计的实战路径你有没有经历过这样的时刻&#xff1f;花了一整天画好电路图&#xff0c;信心满满地点击“更新PCB”&#xff0c;结果弹出一堆红色警告&#xff1a;“封装未指定”、“网络冲突”、“Extra Primitive D…

STC15系列与Keil C51结合的PWM输出全面讲解

深入掌握STC15单片机PWM输出&#xff1a;从寄存器配置到Keil实战调优在嵌入式控制的世界里&#xff0c;PWM&#xff08;脉宽调制&#xff09;是一项看似基础却极为关键的技术。无论是调节LED亮度、驱动直流电机&#xff0c;还是实现数字电源的闭环稳压&#xff0c;背后都离不开…

u8g2中自定义字体嵌入的实战案例

让你的嵌入式界面“有颜有料”&#xff1a;u8g2自定义字体实战全解析你有没有遇到过这样的情况&#xff1f;项目快上线了&#xff0c;老板看了一眼OLED屏幕上的显示效果&#xff0c;皱着眉头说&#xff1a;“这字太普通了&#xff0c;不像我们品牌调性。” 或者用户反馈&#x…

软件I2C在STM32上的实现:手把手教程(从零开始)

软件I2C在STM32上的实现&#xff1a;从协议到代码的深度实践 你有没有遇到过这样的场景&#xff1f;项目已经进入PCB布线阶段&#xff0c;突然发现硬件I2C引脚被串口占用了&#xff1b;或者多个传感器都需要接入I2C总线&#xff0c;但MCU只提供一路I2C外设。更糟的是&#xff0…

【LLaVA】《Improved Baselines with Visual Instruction Tuning》译读笔记

Improved Baselines with Visual Instruction Tuning 摘要 大型多模态模型&#xff08;LMM&#xff09;最近在视觉指令调优方面取得了令人鼓舞的进展。本文首次系统性地研究在 LLaVA 框架下在受控环境中探讨 LMMs 的设计选择。本文展示了 LLaVA 中全连接的视觉语言连接器功能…