开发环境篇之HALCON数据结构

这篇具有很好参考价值的文章主要介绍了开发环境篇之HALCON数据结构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

开发环境篇之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数据:
开发环境篇之HALCON数据结构

Image(图片)

一张图讲清楚图片的3种概念:
开发环境篇之HALCON数据结构

Pixel:像素

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

开发环境篇之HALCON数据结构

开发环境篇之HALCON数据结构

开发环境篇之HALCON数据结构

开发环境篇之HALCON数据结构

开发环境篇之HALCON数据结构
开发环境篇之HALCON数据结构
开发环境篇之HALCON数据结构

开发环境篇之HALCON数据结构

Channel:通道

一张彩色图片由3个通道组成:
开发环境篇之HALCON数据结构

多光谱图片,可多达6个通道:
开发环境篇之HALCON数据结构

Domain:域

域可理解为ROI(感兴趣区域),大部分算子只会处理包含在域内的像素(不是所有算子):
开发环境篇之HALCON数据结构

图片的默认域是整个图片区域:
开发环境篇之HALCON数据结构

域可以裁剪:
开发环境篇之HALCON数据结构

图片操作

图片的读写

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的多种形态:
开发环境篇之HALCON数据结构

Region的作用:

  • 对象分割(blob分析)
  • 用作图片域(Domain)
    只处理域内像素
    可缩短运算时间
  • 用来寻找特征

Region的特点:

  • 任意形状,可以是矩形、圆形,也可以是不规则图形
  • 像素精度
  • 游程编码方式:记录Region在每一行的起始列和终止列
    开发环境篇之HALCON数据结构

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 轮廓)的特点:

  • 由相互连接的点组成,可以是闭合的
  • 亚像素精度
  • 整数坐标是位于像素中心位置
    开发环境篇之HALCON数据结构

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之前:

开发环境篇之HALCON数据结构

HALCON18.11开始:

开发环境篇之HALCON数据结构

Handle(句柄):

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

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

数据监视

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

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

开发环境篇之HALCON数据结构

函数绘图:

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

开发环境篇之HALCON数据结构

数组

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')

扩展:坐标系和角度

开发环境篇之HALCON数据结构

开发环境篇之HALCON数据结构文章来源地址https://www.toymoban.com/news/detail-709740.html

参考资料

  • 开发环境篇 第04讲 HALCON数据结构概览
  • 开发环境篇 第05讲 HALCON 图标类数据之Image(图片)
  • 开发环境篇 第06讲 HALCON 图标类数据之Region(区域)
  • 开发环境篇 第07讲 HALCON 图标类数据之XLD(轮廓)
  • 开发环境篇 第08讲 HALCON 控制类数据
  • 开发环境篇 第09讲 HALCON 数据结构之数组和字典

到了这里,关于开发环境篇之HALCON数据结构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据仓库环境下的超市进销存系统结构

    传统的进销存系统建立的以单一数据库为中心的数据组织模式,已经无 法满足决策分析对数据库系统的要求,而数据仓库技术的出现和发展,为上述问题 的解决提供了强有力的工具和手段。数据仓库是一种对多个分布式的、异构的数据 库提供统一查询的技术。数据仓库管理

    2024年02月10日
    浏览(37)
  • Unity游戏开发客户端面经——数据结构(初级)

    前言:记录了总6w字的面经知识点,文章中的知识点若想深入了解,可以点击链接学习。由于文本太多,按类型分开。这一篇是数据结构常问问题总结,有帮助的可以收藏。 GC方面:栈保持着先进后出的原则,是一片连续的内存域,有系统自动分配和维护,产生的垃圾系统自

    2024年02月06日
    浏览(60)
  • 〖Python 数据库开发实战 - MongoDB篇⑧〗- MongoDB的数据结构

    订阅 Python全栈白宝书-零基础入门篇 可报销! 白嫖入口-请点击我。 推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏, 免费阶段订阅数量4300+ , 购买任意白宝书体系化专栏可加入 TFS-CLUB 私域社区。 福利:加入社区的小伙

    2023年04月09日
    浏览(92)
  • 软件开发中常用数据结构介绍:C语言队列

    工作之余来写写C语言相关知识,以免忘记。今天就来聊聊 C语言实现循环队列 ,我是分享人M哥,目前从事车载控制器的软件开发及测试工作。 学习过程中如有任何疑问,可底下评论! 如果觉得文章内容在工作学习中有帮助到你,麻烦 点赞收藏评论+关注 走一波!感谢各位的

    2024年02月11日
    浏览(48)
  • 【gdb调试】在ubuntu环境使用gdb调试一棵四层二叉树的数据结构详解

    目录 🌞1. 整体思路 🌞2. 准备内容 🌼2.1 配置.c文件 🌼2.2 准备测试程序 🌼2.3 GDB调试基础 🌞3. GDB调试四层二叉树 🌼3.1 测试程序分析 🌼3.2 gdb分析 🌻1. 设置断点 🌻2. 启动程序并执行到断点处 🌻3. 打印变量的值 🌻4. 单步执行 s 进入buildTree函数内部 a. 第一层:根节点赋

    2024年04月17日
    浏览(28)
  • RK3588平台开发系列讲解(内存篇)Linux 伙伴系统数据结构

    平台 内核版本 安卓版本 RK3588 Linux 5.10 Android 12 沉淀、分享、成长,让自己和他人都能有所收获!😄 📢Linux 系统中,用来管理物理内存页面的伙伴系统,以及负责分配比页更小的内存对象的 SLAB 分配器了。 本篇将介绍伙伴系统相关数据结构体。 Linux 也是使用分页机制管理物

    2024年02月05日
    浏览(113)
  • RK3588平台开发系列讲解(进程篇)Linux 进程的数据结构

    平台 内核版本 安卓版本 RK3588 Linux 5.10 Android 12 沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 本篇将介绍 Linux 如何表示进程。 Linux 系统下,把运行中的应用程序抽象成一个数据结构 task_struct ,一个应用程序所需要的各种资源,如内存、文件等都包含在 task_struct

    2024年02月07日
    浏览(43)
  • 从零开始学数据结构和算法:腾讯Android开发面试记录,已开源_android 开发面试算法

    先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年最新Android移动开发全套学习资

    2024年04月25日
    浏览(57)
  • 燕山大学数据结构与算法课程实践——ISBN号识别系统的设计与开发

            ISBN 号是国际标准书号的简称,它是国际标准化组织于 1972 年公布的一项国际通用的出版物统一编号方法。所有正规出版的普通图书版权页都有 ISBN 号, ISBN 是 international standard of book number 几个英文字母的缩写,即国际标准书号。这个号码印刷在每本图书封底( 或

    2024年03月15日
    浏览(72)
  • 横向AlGaN/GaN基SBD结构及物理模型数据库的开发

            GaN基功率器件凭借其临界电场高、电子饱和漂移速度大、热导率高等优良性能在大功率快充、充电桩、新能源汽车等领域具备广泛应用空间。为进一步助推半导体高频、高功率微电子器件的发展进程,天津赛米卡尔科技有限公司技术团队依托先进的半导体TCAD仿真平台

    2024年02月07日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包