Halcon学习(二) Halcon基本操作:批量读入本地文件夹内的图片

批量读取:
在利用Halcon做图像处理时,批量读入图片是个很方便常用的功能,Halcon对其做了很好的支持。
在HDevelop的菜单栏中选择“助手”–“打开新的Image Acquisition”,如下:
Halcon学习(二) Halcon基本操作:批量读入本地文件夹内的图片_第1张图片
选择“选择路径”,确定路径后选择“代码生成”,选择“插入代码”,改代码将被插入到程序窗口中:
Halcon学习(二) Halcon基本操作:批量读入本地文件夹内的图片_第2张图片
代码如下:(在HDevelop中用*做注释,但是CSDN编译器中的代码片不识别*,所以我把下面程序的*换成了常规的注释方式,特此说明)

// Image Acquisition 01: Code generated by Image Acquisition 01
list_files ('F:/芯片检测图库/图三', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
for Index := 0 to |ImageFiles| - 1 by 1
    read_image (Image, ImageFiles[Index])
    // Image Acquisition 01: Do something
endfor

可以看到,其实软件自动生成的代码一共只有三个函数和一个循环控制,read_image()就不用说了,还剩下list_files()tuple_regexp_select()

list_files()用于遍历文件夹下的所有文件,它包含了3个参数:

list_files( : : Directory, Options : Files)

第一个参数为要遍历的文件夹的路径和名称;
第二个参数为处理选项,或者可以理解为规则,就是要获取什么类型的东西,怎么获取。该参数有默认值files,除此之外还有5个Suggested values: ‘directories’, ‘recursive’, ‘follow_links’, ‘max_depth 5’, ‘max_files 1000’;
注意上面的代码,这个参数的位置不止一个参数,它是这样写的['files','follow_links'],也就是说我们可以添加进入多条规则,这种写法貌似是把字符串写到了数组里,总之很方便,很神奇!
第三个参数为路径的输出,我们可以在变量窗口中看到:
Halcon学习(二) Halcon基本操作:批量读入本地文件夹内的图片_第3张图片

下面我们说下第二个参数种不同的选项如何控制遍历内容:
files为选择路径下的文件
directories为选择路径下的文件夹

所以如果我们向规则中同时写了filesdirectories,那么程序会将路径下的所有文件和文件夹都获取到。

recursive用于读取路径下文件夹内的所有东西(具体是文件还是文件夹由前面两个参数决定)
max_depth 用于控制recursive的读取的层数,如果是max_depth 2,那么recursive可以获取路径下文件夹内的内容,而文件夹下的文件夹内的内容就获取不到了。因为最大深度为2,自一层就是路径,第二层就是路径下的文件夹,而路径下文件夹的文件夹是第三次。
max_files 用于控制获取的文件的个数,如果不添加该规则就是获取全部。

max_files 7
Halcon学习(二) Halcon基本操作:批量读入本地文件夹内的图片_第4张图片

max_files 4
Halcon学习(二) Halcon基本操作:批量读入本地文件夹内的图片_第5张图片

tuple_regexp_select() 用于筛选文件:

tuple_regexp_select( : : Data, Expression : Selection)

第一个参数为待选择的文件,在这里其实就是list_files()的输出;
第二个参数为指定的规则;
第三个参数为符合规则的输出;

第二个参数依旧是可以选择多条规则,这里就不多说了,指的注意的是\\的作用是转义字符,转义为 . ,就是name.jpg中的那个 . ,括号为所有格式的合集,格式之间用|分割:

['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case']

上述代码中另一个规则为’ignore_case’,为不区分大小写。

你可能感兴趣的:(#,Halcon)