当前位置: 首页 >  网站大师 >  开发环境篇之HALCON数据结构

开发环境篇之HALCON数据结构

导读:开发环境篇之HALCON基础.目录.基本数据分类.图标类数据.Image(图片).Pixel:像素.Channel:通道.Domain:域.图片操作.Region(区域).Region操作.XLD(轮廓).XLD操作.Control(控制类数据).数据监视.数组.Iconic数组

开发环境篇之HALCON基础

目录

  • 基本数据分类
  • 图标类数据
    • Image(图片)
      • Pixel:像素
      • Channel:通道
      • Domain:域
      • 图片操作
    • Region(区域)
      • Region操作
    • XLD(轮廓)
      • XLD操作
  • Control(控制类数据)
    • 数据监视
  • 数组
    • Iconic数组(Objects)
    • Control数组(Tuple)
    • Vector数组
  • 字典
  • 扩展:坐标系和角度
  • 参考资料

基本数据分类

Iconic图标类数据:

  • Image 图片
  • Region 区域
  • XLD 轮廓

Control 控制类数据:

  • string 字符串
  • integer 整形
  • real 浮点数
  • handle 句柄

数组:

  • Iconic数组(Objects)
    最小索引为1,最大索引为数组长度

  • Control数组(Control Tuple)
    最小索引为0,最大索引为数组长度-1
    长度是1时,可作为1个变量使用

  • Vector数组,可包含Iconic数据和Iconic数组,或Control数据和Control数组

字典Dictionary

  • 键值存储
  • 单个容器内,可以存储任意Iconic和Control数据和数组
  • 可同时包含Iconic(数组)和Control(数组)对象

图标类数据

一张图讲清楚3种Iconic数据:

Image(图片)

一张图讲清楚图片的3种概念:

Pixel:像素

在HALCON中,像素可以是不同的数据类型,用来表示各种不同信息。



Channel:通道

一张彩色图片由3个通道组成:

多光谱图片,可多达6个通道:

Domain:域

域可理解为ROI(感兴趣区域),大部分算子只会处理包含在域内的像素(不是所有算子):

图片的默认域是整个图片区域:

域可以裁剪:

图片操作

图片的读写

read_image(Image,'patras')
write_image(Image,'png',0,'C:/TEMP/MyImage')

注:可以是图片完整路径,如果仅仅是文件名则路径为$HALCONIMAGES/patras.png ,保存文件时必须确保目标文件夹存在。

获取图片的属性:

get_image_type(Image,Type)
get_image_size(Image,ImageWidth,ImageHeight)

访问图片的通道:

count_channels(Image,NumChannels)
access_channel(Image,ImageRed,1)
access_channel(Image,ImageGreen,2)
access_channel(Image,ImageBlue,3)

查看图片灰度直方图:
HALCON有自带的工具,参考Halcon工具之灰度直方图。

访问和设置像素灰度:

get_grayval(Image,130,145,Grayval)
set_grayval(Image,130,145,[0,10,20])

查看图片的域:
默认域是整个图片

get_domain(Image,RegionDomain)

修改图片域:
reduce_domain 设置的域只能是原有域的子区域

gen_circle(RegionCircle,200,200,200.5)
reduce_domain(Image,RegionCircle,ImageReduced)

change_domain 设置的域可以大于原有域

gen_circle(RegionCircle,200,200,200.5)
reduce_domain(ImageReduced,RegionCircle,ImageReduced2)

Region(区域)

Region的多种形态:

Region的作用:

  • 对象分割(blob分析)

  • 用作图片域(Domain)
    只处理域内像素
    可缩短运算时间

  • 用来寻找特征

Region的特点:

  • 任意形状,可以是矩形、圆形,也可以是不规则图形
  • 像素精度
  • 游程编码方式 :记录Region在每一行的起始列和终止列

Region操作

生成Region:

gen_circle(RegionCircle,200,200,100.5)
gen_rectangle1(RegionRect1,30,20,100,200)
gen_rectangle2(RegionRect2,300,200,rad(-30),100,20)

访问Region:

get_region_points(RegionRect1,RowsRect1,ColumnsRect1)
get_region_runs(RegionRect1,RunsRow,RunsColumnBegin,RunsColumnEnd)
area_center(RegionRect1,AreaRect1,_,_)

XLD(轮廓)

XLD(eXtended Line Description 轮廓)的特点:

  • 由相互连接的点组成,可以是闭合的
  • 亚像素精度
  • 整数坐标是位于像素中心位置

XLD操作

XLD生成:

read_image(Image,'fabrik')
gen_contour_polygon_xld(Contour,[0,333],[0,222])

获取轮廓点:

get_contour_xld(Contour,Rows,Columns)
gen_cross_contour_xld(Cross,Rows,Columns,32,rad(45))

Control(控制类数据)

Integer(整形,Booleans,TYPE):

  • 42、0、-1
  • true/false

Real(浮点数Double):

  • 3.141592、-5.3
  • 1.#INF

String(字符数组)

  • 由单括号包裹’string’
  • 典型转义字符’Line1\nLine2’
  • 路径使用反斜杠’C:/HALCON/images’
  • 编码问题:HALCON18.11之前版本根据本地化设置(一般为Latin-1);HALCON18.11开始强制要求使用UTF-8

HALCON18.11之前:

HALCON18.11开始:

Handle(句柄):

  • 类似指针,指向一个复杂的数据结构
  • 数据类型:HALCON18.05之前包含一个Integer的控制类数组无引用计数,补在2使用的句柄,需要手动清除;HALCON18.05之后加入引用计数器,不在引用会自动清除,无需手动

_注:tuple_type_elem 算子可以返回元组元素的类型,具体类型值参考算子手册。_

数据监视

handle目标数据结构,内部数据查看:

dev_open_window (0, 0, 512, 512, 'black', WindowHandle)

函数绘图:

X:=[0:359]
Y:=sin(rad(X))

数组

Iconic数组(Objects)

支持将Image、Region、XLD放入同个数组,要通过调用函数生成、插入和访问

  • Objects的生成和插入

    gen_empty_obj(EmptyObject) concat_obj(EmptyObject,Image,MyObjects) concat_obj(MyObjects,Region,MyObjects) concat_obj(MyObjects,XldEdges,MyObjects)

  • 可直接读取多张图片,自动生成Objects

    read_image(Image,‘printer_chip/printer_chip_0’+[1,2,3,4]) count_obj(Images,NumberImages)

  • Objects成员访问

    select_obj(Images,Image1,1) select_obj(Images,Image3,3)

Control数组(Tuple)

支持将Integer、Real、String变量放入同个数组,通过代码行直接操作:

  • Tuple的生成和插入

    A:=[1,2,‘string’,3.14] A[4]=444 A[5]=555

  • Tuple成员的访问

    TpData:=A[index]

Vector数组

Iconic、Control类数据或者数组不支持放在同个容器,支持嵌套(vector内可包含vector),不能作为参数被算子调用

  • Vector的生成和插入

    • Iconic对象和Iconic数组可以放入通过Vector Vi:={Img1,Img2,Region,XLD} Vi.insert(4,Img3)
    • Control变量和Control数组可以放入同个Vector Vc:={[1,2,‘string’],3.14} Vc.insert(2,123456)
  • Vector成员的访问

    VcData:=Vc.at(index)

Vector跟Tuple的区别:

  • Vector是一个类,Tuple则是普通数组
    获取数组长度:Vc.length() tuple_length(Tp)
    访问数组成员:Vc.at(index) Tp[index]

  • Vector支持Iconic数据,Tuple只支持Control数据

  • Vector不可作为参数被算子调用,Tuple可以

  • Vector和Tuple可以互相转换

    convert_tuple_to_vector_1d convert_vector_to_tuple

字典

字典的特点:

  • 键、值 存储方式

  • 单个容器内,可以存储任意Iconic和Control数据和数组

  • 越来越多地作为算子调用的参数

    create_dict(InputFileDict1) set_dict_tuple(InputFileDict1,‘image_file’,ImageFile) set_dict_object(Image,InputFileDict1,‘image’)

扩展:坐标系和角度

参考资料

  • 开发环境篇 第04讲 HALCON数据结构概览
  • 开发环境篇 第05讲 HALCON 图标类数据之Image(图片)
  • 开发环境篇 第06讲 HALCON 图标类数据之Region(区域)
  • 开发环境篇 第07讲 HALCON 图标类数据之XLD(轮廓)
  • 开发环境篇 第08讲 HALCON 控制类数据
  • 开发环境篇 第09讲 HALCON 数据结构之数组和字典
内容
  • Docker的Portainer认识、安装、使用
    Docker的Portainer
    2023-12-08
    一、认识.docker的图形化界面.Portainer 是一个轻量级的容器管理界面,可以让用户更轻松地管理 Docker
  • misc刷题
    misc刷题
    2023-12-04
    lsb隐写.引用一段百度内容.> LSB隐写就是修改RGB颜色分量的最低二进制位也就是最低有效位(LSB),而人类的眼睛
  • 虹科案例 | 丝芙兰xDomo:全球美妆巨头商业智能新玩法
    虹科案例 | 丝芙兰xDomo:
    2023-12-05
    全球美妆行业的佼佼者丝芙兰,其走向成功绝非仅依靠品牌知名度和营销手段。身为数据驱动型企业,2018年以来,丝芙兰就率先在
  • 密评相关要求介绍
    密评相关要求介绍
    2023-12-04
    密评相关要求介绍.项目建设单位需从物理和环境安全、网络和通信安全、设备和计算安全、应用和数据安全等四个层面采用密码技术措
  • SonarQube系列-通过配置扫描分析范围,聚焦关键问题
    SonarQube系列-通过配置
    2023-12-04
    在许多情况下,你可能不希望分析项目中每个源文件的各个方面。例如,项目可能包含生成的代码、库中的源代码或有意复制的代码。在
  • SublimeText实现Markdown快速预览
    SublimeText实现Mar
    2023-12-07
    SublimeText是什么?.SublimeText是一个文本编辑器,同时也是一个先进的代码编辑器。SublimeTe