>基本数据分类Image 图片 Region 区域 XLD 轮廓 Control 控制类数据 string 字符串 integer 整形 real 浮点数 handle 句柄
数组 Iconic数组(Objects)最小索引为1,最大索引为数组长度 Control数组(Control Tuple)最小索引为0,最大索引为数组长度-1长度是1时,可作为1个变量使用 Vector数组,可包含Iconic数据和Iconic数组,或Control数据和Control数组
字典Dictionary 图标类数据 一张图讲清楚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的作用: 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): Real(浮点数Double): String(字符数组) HALCON18.11之前: HALCON18.11开始: Handle(句柄): 注:tuple_type_elem算子可以返回元组元素的类型,具体类型值参考算子手册。 数据监视 handle目标数据结构,内部数据查看: dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
数组Iconic数组(Objects)支持将Image、Region、XLD放入同个数组,要通过调用函数生成、插入和访问:gen_empty_obj(EmptyObject) concat_obj(EmptyObject,Image,MyObjects) concat_obj(MyObjects,Region,MyObjects) concat_obj(MyObjects,XldEdges,MyObjects)
read_image(Image,'printer_chip/printer_chip_0'+[1,2,3,4]) count_obj(Images,NumberImages)
select_obj(Images,Image1,1) select_obj(Images,Image3,3)
Control数组(Tuple)支持将Integer、Real、String变量放入同个数组,通过代码行直接操作:A:=[1,2,'string',3.14] A[4]=444 A[5]=555
Vector数组Iconic、Control类数据或者数组不支持放在同个容器,支持嵌套(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是一个类,Tuple则是普通数组获取数组长度:Vc.length() tuple_length(Tp)访问数组成员:Vc.at(index) Tp[index]
- Vector支持Iconic数据,Tuple只支持Control数据
- 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')
扩展:坐标系和角度如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。也可以加入微信公众号[DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!作者:二次元攻城狮 出处:cnblogs.com/timefiles/p/17701848.html声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢! |