有人问到图片如果保存在数组中,调用的时候下标是为0还是1?
这个问题勇哥也是有点犹豫,对方信哲旦旦说下标应该为1起始,否则报错。
我猜应该是指的C#那边吧?
在halcon这边,对象数组确实从1开始,如果为0则报错。
那么图形变量可以下标访问吗?
答案是用向量变量。并且下标可以为0。
下面的代码梳理一下几个常见的错误。
read_image(img1,'E:/pic3.tiff') read_image(img2,'E:/t1.tiff') obj:=[] //错误(1),会报图形变量应用在错误的位置。 tuple_add(obj,img1,obj) obj1:={img1,img2} //错误(2),向量变量不可以定义空,会报类型不确定 obj2:={} //错误(3),向量不可以下标访问 dev_display(obj1[0]) //错误(4),向量不可以用select_obj算子访问 select_obj(obj1, ObjectSelected, 1) //正确的向量下标访问方式,可以起始为0 img:=obj1.at(0) dev_display(img)
转一篇写得比较好的讲解读取图片的各种方法,是个扫盲贴子。
===========================================================
HALCON读取图片共有4种方式,接下来将逐一进行介绍。
1 halcon读取图片方式一
1、选择菜单栏中的【文件】→【读取图像】,弹出新界面“读取图像”
2、选择“图像读取”界面中的文件夹标识,弹出新的界面“选择一个文件”,选择想要展示的图片,确认【打开】。图片显示于”读取界面”中,同时说明了图片的信息,宽373像素,高296像素,颜色类型byte,通道数值3,数值3表示1个像素在内存里占据3个字节,24位。“变量名称”可以修改,确认后选择【确定】。
3、此时“程序窗口”中自动生成语句
read_image (Abc, 'C:/Users/Public/Pictures/abc.bmp') 将图像文件读到变量里
1)“Abc”是图片的变量名称;
2)“,”此处的逗号是英文格式;
3)“空格”在逗号的后面有一个空格,不能省略;
4)“'C:/Users/Public/Pictures/abc.bmp'”在单引号内写入图片的路径
4、若此时想在“图形窗口”中显示图像的话,在“程序窗口”中输入“dev_display”,然后连续按下tab键2次,生成显示变量“Abc”的语句。点击菜单栏中的【单步跳过函数】,图形窗口中将会显示“Abc”变量。
5、有的时候会发现,有了read_image()函数,变量会直接在“图形窗口”中显示,该功能可以进行设置。选择菜单栏中的“可视化”→“更新窗口”→“在单步模式”,在单步模式下有5种选择:
1)总是:每一次读取之后,变量图片都会在图形窗口中显示,将之前的图像覆盖;
2)从不:必须通过调用显示函数“dev_display()”才可将图像显示在图形窗口中。
3)清空并显示:每一次都会将原来的图像擦掉,显示新图。
2 halcon读取图片方式二
首先需要将“在单步模式”设置为“总是”,然后直接在“程序窗口”中输入指令“read_image(”,鼠标左键双击选中提示框里的程序,将想要显示的图像的路径写入双引号’’内即可。
此种方式下可以同时读取多张图片,采用数组的方式,首先将之前的‘路径’用数组符号[ ]括在里面,然后再添加其他图片路径,如下:
此时有两个图片,如果想要在“图形窗口”显示的话,有两种方法。
方法一需要进行设置,操作如下:选择下图所示的【图片变量】,单击右键,选择【显示目录】→【对象1】或【对象2】,从而切换显示在图形窗口中的图片。
方法二,输入程序“select_obj (Image1, ObjectSelected, 1)”,显示对象1;select_obj (Image1, ObjectSelected, 2),显示对象2.
3 halcon读取图片方式三
1、选择菜单栏中的【助手】→【打开新的image acquizition】,弹出新的界面
2、选择【图像文件】→【选择文件】,选中想要展示的图片,选择【代码生成】→【插入代码】,退出。
4 halcon读取图片方式四
有时候,我们需要同时对大量的图片进行处理,按照上述方法操作,稍显麻烦。我们采取包含图片的文件夹,具体操作步骤如下:
1、选择菜单栏中的【助手】→【image acquisition】,弹出新界面,选择【图像文件】→【选择路径】,找到存储图片的文件夹,打开。
2、选择【代码生成】→【插入代码】,关闭窗口。此时,程序窗口中自动生成程序代码,如下图
函数原型:list_files(::Directory,Options:Files)
功能:列出目录中的所有文件
参数列表:
第1个参数Directory为输入变量,需要列出的目录名字
第2个参数Options为输入变量,默认值为files,建议值有:'files', 'directories', 'recursive', 'follow_links', 'max_depth 5', 'max_files 1000'
Files:指定搜索的格式为文件
Directories:指定搜索的格式为文件夹
recursive:指定可以遍历子文件夹下的文件
max_depth 5:指定遍历的深度
max_files 1000:指定遍历的最大文件数目
第3个参数Files为输出变量,读取的文件
函数原型:tuple_regexp_select( : : Data, Expression : Selection)
功能:文件格式筛选
Data:被选择的文件路径数组
Expression:文件格式的筛选规则
(bmp|JPG) 筛选的文件格式
'ignore_case' 忽略大小写
Selection:选择出的文件路径数组
index, 索引号, 一般从0开始计数
————————————————
版权声明:本文为CSDN博主「机器人自动化控制」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/haier123888/article/details/103272465

