Halcon基本语法

Halcon是什么?

Halcon(全称为Halcon Imaging Library)是由德国MVTec Software GmbH开发的一套功能强大的机器视觉软件库。Halcon提供了丰富的图像处理和机器视觉算法,用于解决各种工业和科学领域中的视觉检测、识别和测量等问题。

1、显示图片

halcon 是有自己的语法,也支持C++、C#、Python,halcon保存的文件后缀是.hdev格式

halcon的注释
*是整行注释
// 是代码后面的注释
快捷键F5 运行

代码不需要打印和输出,运行之后结果会显示在变量窗口

* 引入图片
read_image(Image,'C:/Users/Pictures/Pictures/image.jpg')
read_image(Image1,'fabrik')  软件安装目录下的image,不需要写全部路径

* 获取图像大小
get_image_size(Image, Width, Height)

* 打开图像窗口
* WindowHandle:窗口管理者(handle句柄,在某一个进程中的唯一索引)
dev_open_window(0, 0, Width, Height, 'black', WindowHandle)

*设置当前填充区域
dev_set_draw('margin')

* 显示图像
dev_display(Image)

在这里插入图片描述

2、基本语法格式

* 语法学习
* 声明变量
* C#语法是 int x = 1
* halcon语法是 x:=1
x:=1
y:='Hello halcon'
i:=1.0

* 分支语句判断 if
if(i=x)
    i:=2.2
endif

* 不等于
if(x#2)
    i:=1.0
endif

* > < 和C#都是一样的
if(i>6)
endif

if(i<6)
endif

* else if 判断
if(i>0)
    i:=2.0
elseif(i<2)
endif

* 逻辑与 &&
if(x>0 and x<3)
    i:=4.0
endif

* 逻辑或 ||
if(x>0 or x<3)
    i:=5.0
endif

* 逻辑非 !=
if(not(x=8))
    i:=8
endif

* 数组
nums:=[1,2,3,4,5]
nums2:=[1,2,3,4.5]
nums3:=[1,2,3,'4.5']

* for循环
for j:=0 to 5 by 1
endfor

* while 循环
a:=1
while(a==1)
    a:=2
endwhile

* switch case 循环
switch(a)
case 1:
    a:=5
    break
case 2:
    a:=6
    break
endswitch

* 元组
nums:=[1,2,3,4,5]
* 元组长度
len := |nums|

* 异常捕获
try
    * nums-1 长度-1
    * nums-1 长度在这里有问题,需要换成 |nums|
    for Index := 0 to |nums| by 1
        a:=nums[Index]
    endfor
catch (Exception)
    *disp_message (3600, Exception, 'window', 12, 12, 'black', 'true')
endtry

* 进制:halcon对进制可以直接转换。
i1 := 123$'#o' //8进制,0代表前缀
i2 := 123$'#x' //16进制,0x为前缀,7b代表赋值
i2 := 123$'#X' //7B为赋值,7b=7B
i3 := 123$'#f' //double类型,默认保留小数点后六位
i4 := 123$'#g' //
i5 := 123$'#G' //
i6 := 123$'#e' //转成科学计数
i7 := 123$'#E' //

* 整数
d1 := 123$'6' // 小于6位文本右对齐,大于6位忽略
d2 := 123456$'6' //

d3 := 123$'-6' // 小于6位文本左对齐,大于6位忽略
d4 := 123456$'-6' //

d5 := 123$'.6' // 小于6位时,文本左补零
d6 := 123$'10.5' // 小于十位时,文本右对齐,小于五位补零
d7:= 12345$'10.5' //
d8:= 1234567891$'10.5' //

* 四舍五入
e := 1.5555
e1 := e$'.0f'
e2 := e$'.1f'
e3 := e$'.2f'
e4 := e$'.3f'

在这里插入图片描述

3、元组(数组)

元组(Tuple)是一种基本的数据结构,用于存储和处理一组有序的元素。元组可以包含不同类型的数据,如整数、实数、字符串等,甚至可以包含其他元组。元组在 HALCON 中被广泛应用于表示和操作图像处理和计算机视觉中的数据。

* 元组
Tuple := [1,0,3,4,5,6,7,8]
* 根据索引来操作元组
Tuple[0] := 2
* 批量操作元组的值
Tuple[1,3,5] := 'abc'

*批量为元组赋值,自动填充0~100的连续值
tuple2:=[0:100]

*批量为元组赋值,从0150的连续值,步长为3
tuple3:=[0:3:150]
* 批量为元组赋值,从100~-100的连续值,步长为-10
tuple4:=[100:-10:-100]

*合并(合并在一起并去重)
tupleInt1:=[0,1,2,3,4,5]
tupleInt2:=[9,8,7,6,5]
tuple_union(tupleInt1, tupleInt2, Union)

*交集(两个元组中一样的元素)
tupleInt3:=[0,1,2,3,4,5]
tupleInt4:=[9,8,7,6,5]
tuple_intersection (tupleInt3, tupleInt4, Intersection)

* 替换
tupleInt5:=[0,1,2,3,4,5]
tuple_replace (tupleInt5,[0,1],['a','b'],Replaced)

* 插入
tupleInt6:=[0,1,2,3,4,5]
tuple_insert(tupleInt6,3,'x',Replaced2)

* 求绝对值
tuple_abs ([1,-23,-4,-5],Abs)

* const与元组的使用
* 长度为10,元素为const类型的新元组
tuple_gen_const(10,2,Newtuple)

* 链接
a:=[tupleInt1,tupleInt2]
* 获取索引对应的值
b:=a[1]
* 批量获取索引的值
c:=a[1:5]

* 选取索引中为x的元素
d:=subset(Replaced2,3)

*移除,对应索引的值
e:=remove(Replaced2,3)

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python数据结构--栈

栈简介 栈类似于一个箱子&#xff0c;我们向里面放书&#xff0c;我们最先放进去的书是在最底下的&#xff0c;所以我们想要拿出来就只能最后一个拿出来&#xff0c;每次放和取都只能操作最上面那个。 特点&#xff1a;先进后出 名词概念&#xff1a;进栈&#xff08;放书&a…

掌握Java建造者模式:逐步构建复杂对象的艺术与实践

建造者模式的主要目的是将一个复杂对象的构建过程封装起来&#xff0c;使得客户端代码不需要知道对象创建的细节。这种模式特别适用于那些具有多个组成部分、创建过程复杂、对象属性多且大多数属性可选的场合。 在Java中&#xff0c;建造者模式通常涉及以下几个角色&#xff1…

Day29:安全开发-JS应用DOM树加密编码库断点调试逆向分析元素属性操作

目录 JS原生开发-DOM树-用户交互 JS导入库开发-编码加密-逆向调试 思维导图 JS知识点&#xff1a; 功能&#xff1a;登录验证&#xff0c;文件操作&#xff0c;SQL操作&#xff0c;云应用接入&#xff0c;框架开发&#xff0c;打包器使用等 技术&#xff1a;原生开发&#x…

SLAM|初识SLAM

在空间中&#xff0c;人可以通过固定不动的事物来作为参考系中的参照物。 而这些固定不动的东西可以称之为特征&#xff0c;空间可以理解成特征存在的空间。 而参照物的意义&#xff0c;可以变成是看到某某参照物&#xff0c;就按这个某某参照物进行位置移动。 比如说碰到这个…

【SQL】550. 游戏玩法分析 IV (关键点:确定连续两次登录)

前述 常见函数用法示例&#xff1a; DATEDIFF(col1, col2) 1DATE_ADD(MIN(col), INTERVAL 1 DAY)ROUND(3.1415926,3) > 四舍五入得到 3.142 题目描述 leetcode原题&#xff1a;550. 游戏玩法分析 IV 思路 确定连续两次登录统计&#xff0c;保留两位小数 写法一 关键…

【Tauri】(4):使用Tauri1.5版本+candle框架运行大模型,前后的搭建运行成功,整合前端项目,在应用中显示。

1&#xff0c;视频地址 关于tauri 框架 2&#xff0c;搭建rust 环境 # 设置服务器国内代理&#xff1a; export RUSTUP_DIST_SERVER"https://rsproxy.cn" export RUSTUP_UPDATE_ROOT"https://rsproxy.cn/rustup"# 设置环境变量 export RUSTUP_HOME/data/…

【Haproxy】Haproxy的配置和应用

HAProxy介绍 HAProxy是法国开发者威利塔罗(Willy Tarreau)在2000年使用C语言开发的一个开源软件&#xff0c;是一款具备高并发(一万以上)、高性能的TCP和HTTP负载均衡器&#xff0c;支持基于cookie的持久性&#xff0c;自动故障切换&#xff0c;支持正则表达式及web状态统计&a…

HCIA-HarmonyOS设备开发认证V2.0-习题2

目录 习题一习题二坚持就有收获 习题一 # 判断题## 1.PWM占空比指的是低电平时间占周期时间的百分比。(错误)正确(True)错误(False)解题&#xff1a; - PWM占空比指的是高电平时间占周期时间的百分比## 2.UART是通用异步收发传输器&#xff0c;是通用串行数据总线&#xff0c;…

微服务技术栈SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式(四):消息队列MQ

文章目录 一、消息队列MQ二、RabbitMQ2.1 单机部署2.2 消息模型 三、SpringAMAP3.1 简单消息队列3.2 工作消息队列3.3 发布-订阅模型&#xff1a;FanoutExchange 广播交换机3.4 发布-订阅模型&#xff1a;DirectExchange 路由交换机3.5 发布-订阅模型&#xff1a;TopicExchange…

Ubuntu平铺左、右、上、下、1/2、1/4窗口(脚本)

前言 之前因为一直在用Ubuntu 18或者Ubuntu 20然后发现装了GNOME插件后&#xff0c;电脑在使用过程中&#xff0c;会时不时的卡死&#xff08;鼠标没问题&#xff0c;键盘输入会有10-20秒的延迟&#xff09;频率基本是一小时一次&#xff0c;因为这种卡顿会很容易打断思路&…

【职言】三年功能测试,一些测试工作的“吐槽”

以下为作者观点&#xff1a; 概述 作为功能测试&#xff0c;我也分享下日常工作中功能测试值得吐槽的问题&#xff0c;由于工作时间不长且未进过大厂&#xff0c;不了解大公司的工作模式和流程&#xff0c;所以自己的方法和理解都是基于中小公司的工作经验总结&#xff0c;应…

Linux 之五:权限管理(文件权限和用户管理)

1. 文件权限 在Linux系统中&#xff0c;文件权限是一个非常基础且重要的安全机制。它决定了用户和用户组对文件或目录的访问控制级别。 每个文件或目录都有一个包含9个字符的权限模式&#xff0c;这些字符分为三组&#xff0c;每组三个字符&#xff0c;分别对应文件所有者的权限…

2024蓝桥杯每日一题(差分)

一、第一题&#xff1a;空调 解题思路&#xff1a;差分 希望P减掉T后就相当于从0到New_P&#xff0c;想到得到New_P只需要对全0数组进行若干次区间加操作&#xff0c;所以只需要对New_P数组进行差分&#xff0c;累加正数和负数&#xff0c;哪个绝对值大答案就是那个。 …

【深度学习笔记】6_8 长短期记忆(LSTM)

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;部分标注了个人理解&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 6.8 长短期记忆&#xff08;LSTM&#xff09; 本节将介绍另一种常用的门控循环神经网络&#xff1a;长短期记忆&#xff08;long shor…

二叉树的先序遍历详解(小白也懂)(附带中序,后序代码)

文章目录 二叉树的先序遍历(分而治之思想)样例图函数的递归调用源代码运行结果 二叉树的先序遍历(分而治之思想) 代码在文章底部。 先序遍历又叫先根遍历&#xff0c;顾名思义&#xff1a;遍历顺序为根&#xff0c;左子树&#xff0c;右子树。 样例图 本文将对以下二叉树进…

关于 JVM

1、请你谈谈你对JVM的理解&#xff1f; JVM由JVM运行时数据区&#xff08;图示中蓝色框包含部分&#xff09;、执行引擎、本地库接口、本地方法库组成。 JVM运行时数据区&#xff0c;分为方法区、堆、虚拟机栈、本地方法栈和程序计数器。 1.方法区 Java 虚拟机规范中定…

YOLOv8-Seg改进:SPPF涨点篇 |引入YOLOv9的SPPELAN

🚀🚀🚀本文改进:SPP创新结合ELAN,来自于YOLOv9,助力YOLOv8,将SPPELAN代替原始的SPPF 🚀🚀🚀YOLOv8-seg创新专栏:http://t.csdnimg.cn/KLSdv 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 1)手把手教你如何训练YOLOv8-seg; 2)模型创新,提升分割…

day59 线程

创建线程的第二种方式 实现接口Runnable 重写run方法 创建线程的第三种方式 java.util.concurrent下的Callable重写call()方法 java.util.concurrent.FutureTask 创建线程类对象 获取返回值 线程的四种生命周期 线程的优先级1-10 default为5&#xff0c;优先级越高&#xff0c…

JavaEE进阶(15)Spring原理:Bean的作用域、Bean的生命周期、Spring Boot自动配置(加载Bean、SpringBoot原理分析)

接上次博客&#xff1a;JavaEE进阶&#xff08;14&#xff09;Linux基本使用和程序部署&#xff08;博客系统部署&#xff09;-CSDN博客 目录 关于Bean的作用域 概念 Bean的作用域 Bean的生命周期 源码阅读 Spring Boot自动配置 Spring 加载Bean 问题描述 原因分析 …

JavaEE企业开发新技术

目录 2.1 Class对象基本概念 1、概念 2.2 Class对象的获取方式 2.3基本数据类型的Class对象 1、概念 2.4 反射的基本概念 概念 2.5 Class对象的基本使用-1 2.6 Class对象的基本使用-2 newInstance()和new()区别&#xff1a; 2.1 Class对象基本概念 1、概念 反射的…