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

Halcon编程指南:符号与元组操作详解

符号

  • 等号 :=

  • 注释 *

  • 比较运算符:=​、==​、>​、<​、#​、and​、or

  • 取反:not(true)

流程控制

判断

if(index < 1)a:='b'
endif
​
if(index < 1)a:='b'
elsea:='c'
endif
​
if(index < 1)a:='b'
elseif(index > 3)a:='c'
endif

for循环

for I := 0 to NumBalls - 1 by 1
endfor

while循环

while (x== 1)
Endwhile

switch分支

switch (Index)
case 1:break
case 2:break
default:break
endswitch

异常获取:

Try
​
catch (Exception)
​
Endtry

Tuple元组

元组类似数组,用于存储一系列相同类型的数据

元组定义和赋值

* 声明一个元组并赋值
变量名 := [1,2,3,4]
​
* 批量给Tuple数组赋值,其值为0到10000连续数值
Tuple3 := [0:10000]
​
* 批量给Tuple数组赋值,其值为3到200连续数值,步长为1
Tuple4 := [3:1:200]
​
* 批量给Tuple数组赋值,其值为100到-100连续数值,步长为-10
Tuple5 := [100:-10:-100]

索引数据修改

*索引赋值
Tuple1[1] := 2
​
* 批量索引赋值
Tuple1[1,3,5] := 'abc'

数组其他操作

  • 对两个Tuple数组进行合并操作tuple_union (数组a, 数组b, 新数组名称)​​

  • 两个Tuple数组进行交集操作tuple_intersection (数组a, 数组b, IntersectionInt)​​

  • 替换

    • tuple_replace (源数组, 1, 88, 新数组名称)​​ 替换索引1的值为88

    • tuple_replace (源数组, [1,3], 88, 新数组名称)​​ 替换索引1、3的值为88

    • tuple_replace (源数组, [1,3], [66,88], 新数组名称)​​ 替换索引1、3的值为66、88

  • 向Tuple数组插入数值 tuple_insert(源数组, 3, 'x', 新数组名称)​​

  • 数组反转 tuple_inverse (源数组, 新数组)​​

  • 获取数组长度

    • tuple_length (源数组, 长度)​​​

    • len := |源数组|​​​

    • tuple_strlen(字符串, 长度)​​ 获取字符串长度

  • 最大值、最小值、平均数 tuple_max、tuple_min、tuple_mean​​

  • 返回一个随机数tuple数组,分布在[0,1)范围之间 tuple_rand(10,temp)

  • 两个数组相减 tuple_sub(Array1,Array2,Sub)​​

  • 将两个数组元素逻辑与 tuple_and(Array1,Array2,And)​​

  • 将两个数组元素逻辑或 tuple_or(Array1,Array2,Or)​​

  • 给数组元素升序排序 tuple_sort(Array,Sorted)​​

  • 数组元素升序排序 tuple_sort(Array,Sorted)​​

  • 创建固定长度的数组,其中放置相同的数据 gen_tuple_const(长度, 内容)

格式化

  • a2 := 123$'#o'​​​ OCT,表示8进制(小写o),得到的字符串以0为前缀 '0173'

  • a3 := 123$'#x'​​​ hex,表示16进制,得到的字符串以0x为前缀(小写) '0x7b'

  • a4 := 123$'X'​​​ Hex,表示16进制,得到的字符串以0X为前缀(大写) '0X7B'

  • a5 := 123$'f'​​​ double类型,默认保留小数点后六位

  • a5 := 123$'.3f'​​ double类型,保留小数点后三位

  • a6 := 123$'g'​​​ 使数字始终保持六位,不足在后面补.0

  • a7 := 123$'G'​​​ 使数字始终保持六位,不足在后面补.0

  • a8 := 123$'e'​​​ 转换成科学计数 '1.230000e+02'a9 := 123$'E' // 转换成科学计数 '1.230000E+02'

  • b1 := 123$'6'​​​ 保证字符串至少六位。小于六位文本右对齐,在前面补空格。大于六位不影响

  • b2 := 123$'-6'​​​ 保证字符串至少六位。小于六位文本左对齐,在后面补空格。大于六位不影响

  • b3 := 123$'.6'​​​ 保证字符串至少六位。小于六位前面补0。大于六位不影响

  • b4 := 123$'10.6'​​​ 保证字符串至少十位。小于六位前面补0,文本右对齐,前面补4个空格。大于六位小于十位,在前面补空格文本右对齐。大于十位不影响

  • s1 := 'abc'$'6'​​​ 同上​

  • s2 := 'abc'$'-6' ​​​​同上

数据结构

图形参数

Image

Halcon中,Image = 通道和域构成.

通道:包括单通道和多通道,图像数据存放在通道里; 单通道指能用一个灰度级数值表示像素,黑白图像。如果像素值使用三原色表示,则为多通道图像,也就是3通道,分别为(Red,红色)、G(Green,绿色)、B(Blue,蓝色)3个通道,各自的取值范围都是0~255。

大多数情况下,灰度图像可以满足检测需求,为了节约计算量并加快速度,因此通常会将彩色图像转换为灰度图像进行处理。

像素类型:

  • Byte:8 bits 无符号; 标准的灰度图像会用这种类型;

  • Uint2:16 bits 无符号;标准的灰度图像会用这种类型;

  • Int1:8 位有符号; 两帧图像的差异会用这种类型;

  • Int2: 16 位有符号;两帧图像的差异会用这种类型;

  • Int4:32位有符; 两幅图形的灰度频谱会使用这种类型

  • Direction:8 位无符号;值为:0-179;边缘梯度会用这种类型

  • Real:32 位浮点类型:边缘提取会用这种类型;

  • Complex:每个像素用2个real 值:用频率表示图像用这种类型

  • Cyclic:8 位无符号;给每个颜色分配灰度值

  • Vector field:两帧 rea| 类型的图像,描述X或者Y方向的运动。

图像相关算子
  • read_image( : Image : FileName : )​ 读取图像

  • access_channel(MultiChannelImage : Image : Channel :)​ 获取多通道图像中的某一个通道

  • count_channels(MultiChannelImage:::Channels)​ 获取图像的通道数量

  • append_channel(MultiChannelImage, Image:ImageExtended::)​ 将两通道的图像叠加得到新图像

  • compose3(Imagel, Image2,Image3:MultiChannelImage::)​ 将三个单通道的图像合成一个三通道彩色图像

  • decompose3(MultiChannellmage:Imagel, Image2, Image3::)​将三通道彩色图像转换为三个单灰度图像

  • trans_from_rgb(ImageRed, ImageGreen, ImageBlue:ImageResultl, ImageResult2, ImageResult3:ColorSpace:)​ 将彩色图像从RGB空间转换到其他颜色空间

    • ImageRed、ImageGreen、ImageBlue:分别对应彩色图像的R通道、G 通道、B通道的灰度图像。

    • ImageResult1、ImageResult2、ImageResult3:分别对应转换后得到 的三个单通道灰度图像。

    • ColorSpace : 输 出 的 颜 色 空 间 , 包 括‘hsv’、‘hls’、‘hsi’、‘ihs’、‘yiq’、‘yuv’等,RGB颜 色空间转换到其他颜色空间有对应的函数关系。

Regions

Region指图像中的一块区域。机器视觉的任务之一就是识别图像中包 含某些特性的区域,比如执行阈值分割处理。

将区域标识为以行列坐标为内容的游程编码的形式,使之成为一种压缩方式,存储更加高效

例如:字符串5555557777733322221111111 游程编码为:(5,6)(7,5)(3,3)(2,4)(1,7)。可见,行程编码的位数远远少于原始字符串的位数

区域的特征主要有以下3个部分

  1. 基础特征:Region的面积、中心、宽高、左上角与右下角坐标、长 半轴、短半轴、椭圆方向、粗糙度、连通数、最大半径、方向等。

  2. 形状特征:外接圆半径、内接圆半径、圆度、紧密度、矩形度、凸 性、偏心率、外接矩形的方向等。

  3. 几何矩特征:二阶矩、三阶矩、主惯性轴等。

区域相关算子
  • threshold(Image:Region:MinGray, MaxGray:)​ 阈值分割,将图像按照对应的灰度值分割出区域,区域的灰度值g满足:MinGray≤g≤MaxGray

    • 可以使用灰度直方图工具

      打开之后选择输出使能

      拖拽直方图中红色和绿色的线条来调整阈值的最大值和最小值,选择比较合适的范围

XLD

XLD对象提供了亚像素精度,轮廓多边形。

xld特征分为4个部分

  1. 基础特征:XLD面积、中心、宽高、左上角及右下角坐标。

  2. 形状特征:圆度、紧密度、长度、矩形度、凸性、偏心率、外接矩 形的方向及两边的长度等。

  3. 云点特征:云点面积、中心、等效椭圆半轴及角度、云点方向等。

  4. 几何矩特征:二阶矩等。

XLD相关算子
  • threshold_sub_pix(Image:Border:Threshold:)​ 根据预置提取单通道图像中的轮廓

  • edges_sub_pix(Image : Edges : Filter, Alpha, Low, High : )​ 使用滤波提取轮廓

控制参数

和高级语言的类型相似

  • string 字符串

  • integer 整型

  • real 实型

  • tuple array 数组(可为整型,实型或是字符串)

  • handle 句柄

打开图像窗口的三种方式

  • dev_open_window (0, 0, 512, 512, 'black', WindowHandle)​ 打开一个窗口, 位置:0 0,宽高:512,512,背景,句柄

  • dev_open_window_fit_image (Image, 0, 0, 200, 200, WindowHandle1)​打开一个窗口,并根据指定的图像的尺寸保持纵横比,参数4、参数5分别指定宽度和高度的限制值

    • 参数4和5如果指定为-1则分别使用 [500,800] [400,600]

  • dev_open_window_fit_size(0, 0, Width, Height, 200, 200, WindowHandle2)​打开一个窗口,并根据指定的尺寸保持纵横比,参数5、参数6分别指定宽度和高度的限制值

一般打开窗口之后需要dev_display(Image)​进行图像的显示

xld和区域的读写

  • write_contour_xld_dxf​、read_contour_xld_dxf​这两个算子可以将轮廓xld存储和读取到文件中。可以使用edges_sub_pix​提取轮廓xld

  • write_regions​、read_regions​这两个算子可以将区域存储到文件中,以及从文件中读取区域。可以使用threshold​阈值后获得区域


文章转载自:

http://8PiEFLzF.nqpxs.cn
http://8dMxrt9P.nqpxs.cn
http://ImLoU4O9.nqpxs.cn
http://SrEyX6pO.nqpxs.cn
http://a5ivWG7E.nqpxs.cn
http://S8jg0MjM.nqpxs.cn
http://nztjWRMM.nqpxs.cn
http://iDbqYTeO.nqpxs.cn
http://2qktGLLB.nqpxs.cn
http://Q8dPCnqT.nqpxs.cn
http://OxRe15TX.nqpxs.cn
http://TTItdgrO.nqpxs.cn
http://29mzHgmU.nqpxs.cn
http://3PrJnuUr.nqpxs.cn
http://24IgBv0w.nqpxs.cn
http://dsrscZWI.nqpxs.cn
http://qouygQpI.nqpxs.cn
http://hIHy9qPc.nqpxs.cn
http://9IrfUqzM.nqpxs.cn
http://Wtg43969.nqpxs.cn
http://KxzfPCp0.nqpxs.cn
http://fHuSP0vA.nqpxs.cn
http://cpXJr8dT.nqpxs.cn
http://vOBSyxYU.nqpxs.cn
http://HT7tVWUh.nqpxs.cn
http://GaSNReoo.nqpxs.cn
http://Qk13i2VY.nqpxs.cn
http://BobgUMsm.nqpxs.cn
http://EySo53GO.nqpxs.cn
http://8309f0GE.nqpxs.cn
http://www.dtcms.com/a/381319.html

相关文章:

  • 嵌入式第五十二天(GIC,协处理器,异常向量表)
  • 嵌入式学习day48-硬件-imx6ul-key、中断
  • 查找算法和递推算法
  • Webman 微服务集成 RustFS 分布式对象存储
  • 基于51单片机的太阳能锂电池充电路灯
  • 【人工智能通识专栏】第十三讲:图像处理
  • 滚动分页查询-通俗解释
  • 电缆工程量计算-批量测量更轻松
  • UDS NRC速查
  • L2-【英音】地道语音语调--语调
  • 13.渗透-.Linux基础命令(五)-用户管理(修改用户密码)
  • 解决串口数据乱序问题
  • 智能化集成系统(IBMS):构建智慧建筑 “中枢大脑” 的全方案
  • 基于游标(Cursor)的方式来实现滚动分页
  • 30.线程的互斥与同步(四)
  • 《没有架构图?用 netstat、ss、tcpdump 还原服务连接与数据流向》
  • 仓颉语言编程入门:第一个 Windows 下的仓颉应用程序
  • 台达A2E
  • 【操作系统核心考点】进程调度算法全面总结:高频题型与易错点解析
  • ethercat在线调试工具
  • python base core partment-day07-异常、模块、包(对零基础小白友好)
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘vaex’问题
  • Acrobat JavaScript 代码中的颜色
  • TCGA单癌肿按单基因高低分组的转录组差异热图分析作图教程
  • SSRF:CVE-2021-40438
  • 传统项目管理与敏捷的核心差异
  • count down 98 days
  • 算法题 Day6---String类(3)
  • 知识模型中优化和模拟决策内容有哪些
  • PRINCE2与PMP项目管理体系对比