首页 > 其他分享 >开发环境篇之HALCON数据结构

开发环境篇之HALCON数据结构

时间:2023-09-14 10:46:12浏览次数:43  
标签:Control Vector Image Iconic HALCON 开发 数组 数据结构 Region

开发环境篇之HALCON基础

目录

基本数据分类

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

Image(图片)

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

Pixel:像素

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

image

image

image

image

image
image
image

image

Channel:通道

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

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

Domain:域

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

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

域可以裁剪:
image

图片操作

图片的读写

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的多种形态:
image

Region的作用:

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

Region的特点:

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

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

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

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

image

HALCON18.11开始:

image

Handle(句柄):

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

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

数据监视

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

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

image

函数绘图:

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

image

数组

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

扩展:坐标系和角度

image

image

参考资料

标签:Control,Vector,Image,Iconic,HALCON,开发,数组,数据结构,Region
From: https://www.cnblogs.com/timefiles/p/17701848.html

相关文章

  • RK3568开发笔记(九):开发板buildroot固件调通RS485口,运行项目中RS485协议调试工具Demo
    前言  上一篇已经将Qt移植过去了,此时我们移植整体应用不是什么问题了,那么现在应用对外得接口使用了RS485接口,板载了一个RS485,于是需要调通,兼容这个开发板得RS485。 补充  看起来很简单,弄起来不懂得就是不懂,懂得虽然懂还得花时间去研究一下开发板特性,与厂家沟通下,......
  • Web开发中的字符集问题
    很多人在开发网站开始阶段没有注意到字符集统一的重要性,因此开发的网站不是数据库中存有乱码就是web页面显示为乱码。现以web开发中的字符集为主体讨论在个人和团队web开发中需要注意的问题,和相应的解决方法。1.常见问题的解决比如我在网站开发阶段就遇......
  • 跨端开发方案之桌面应用小程序
    小程序容器技术的未来是充满希望的,它为我们开辟了一个全新的数字世界,连接了桌面操作系统和移动生态系统之间的界限。正如技术不断演进,我们可以期待着更多的创新和发展,为用户带来更加便捷和多样化的应用体验。这一技术的推广和应用将继续推动数字科技的发展,塑造着未来的数字生活。......
  • 洛谷[P1305 新二叉树] Tag:二叉树、基础数据结构
    P1305新二叉树题目描述:输入一串二叉树,输出其前序遍历。输入格式:第一行为二叉树的节点数$n(1\len\le26)$,后面\(n\)行,每一个字母为节点,后两个字母分别为其左右儿子。特别地,数据保证第一行读入的节点必为根节点。空节点用*表示输出格式:二叉树的前序遍历。思路:对......
  • 读书笔记-2023开发者报告-第一部分
    最近阅读了一年一度的开发者报告(来源csdn),这篇文章主要摘录一部分内容。这个开发者报告起始时间是2004年。从开发者职业上看,从事后端开发的比例最高。从开发者年龄上看,三十岁以下的开发者最多,达到了百分之七十多,但是比较之前,出现了一定下降。从开发工具选择上看,python上升程度很大,vu......
  • 【计算机视觉开发(一)】: yolov5与python环境安装
    前言:最近正在学习计算机视觉开发这块,打算开通一个专栏记录学习总结以及遇到的问题汇总。本篇是这个系列的第一篇,主要是环境安装以及yolov5的介绍。关于计算机视觉:参考:百度百科-关于计算机视觉)计算机视觉是一门研究如何使机器“看”的科学,更进一步的说,就是是指用摄影机和......
  • 桌面卡片开发教程02:从底层原理开始讲透message事件的刷新机制
    相关文章:桌面卡片开发教程:从底层原理开始讲透call事件的刷新机制首先铺垫两个基础知识:1.为什么桌面卡片需要使用特殊机制来刷新?主要有两个原因:第一是HarmonyOSApi9的桌面卡片出于降低系统能耗的目的,被限制了只有5秒的活动时间。超过5秒以后桌面卡片的相关进程会被强制销毁,变成一个......
  • 如何在Vue项目中引入avue进行开发?
    Avue的官网官网地址:​ ​https://avuejs.com/​安装3.1安装npmi@smallwei/avue-S$3.2在main.js中引入//引入importAvuefrom'@smallwei/avue';import'@smallwei/avue/lib/index.css';Vue.use(Avue)4使用4.1官方文档4.2实际应用<template><div&g......
  • android 手机开发虚拟定位
    Android系统提供了模拟位置提供者(MockLocationProvider)来允许开发者模拟虚拟位置信息,用于测试应用的地理位置相关功能。1.获取模拟位置权限:在你的应用的AndroidManifest.xml文件中添加以下权限<uses-permissionandroid:name="android.permission.ACCESS_MOCK_LOCATION"/>2.启用......
  • 七牛云存储____官方SDK集成开发
    packagecom.scdn.qnscdn;/***七牛常理配置**@authorGod待整理好配到config文件里*ACCESSKEY这是我个人申请的一个测试的号everyonecanuseingit*SECRETKEY*/publicclassQnConstant{ //设置好账号的ACCESS_KEY和SECRET_KEY publicstaticfinalS......