1.废话
很多时候我们不止读取一张图片-读取文件夹下的多张
甚至我们可能想在多个文件夹中读取多张图片。
再变态点我们想再任意若干路径下读取任意若干张图片。
没关系,这些halcon开发人员都替我们考虑到了。
只需要使用下面一个算子
list_files ('', 'files', Files)
即可完成全部操作。
你要是通过halcon引擎的方式来和上位机程序配合,那么还推荐halcon的本地函数
list_image_files (Files, 'default', [], ImageFiles)
2.实现效果
a-读取单个文件夹中所有图片
这个文件夹下全是图片,将这个文件夹路径给到halcon算子
list_files ('G:/20240318-xema/data/Calib/L', 'files', Files)
获取到这个路径下所有图片的绝对路径。
以字符串数组的形式给出的,非常简单,后续使用for循环 读取图片就可以了。
b-读取单个文件夹下所有文件夹路径
这个时候我们想要看下这个文件内有哪些文件夹,并获取这些文件夹的路径,还是这个算子
list_files ('G:/20240318-xema/data/', 'directories', Files)
data文件夹内有多个文件夹和文件,我们想要获取到这些文件夹
看看运行结果
c-读取这个文件夹下的所有文件和所有子文件夹下的所有文件
注意,这个是读取这个文件夹内部及其下层的所有文件。
思考一下,有了这个文件夹的路径,我先获取这个文件夹下有没有文件,如果有,我就保存到数组里面,紧接着我再看看这个文件夹下有没有子文件夹,如果有我就继续在子文件夹下判断有没有文件,如果有,我就拿到子文件夹下的文件路径加入到数组中,循环遍历下去,就可以实现我们的目的。
要实现上述功能(因为我们不知道这个文件下的子文件夹究竟有多深),所以我们需要编写一个函数,这个函数的功能就是给它一个文件夹,它返回你若干的子文件夹和若干个文件路径,这样代码编写的时候使用递归调用(函数内部自己调用自己)即可实现该效果。
不过halcon的开发人员想到了这一点,采用如下代码即可获取该文件下所有子文件夹内的图片
list_files ('G:/20240318-xema/data/Calib/', 'recursive', Files)
list_image_files ('G:/20240318-xema/data/', 'default', 'recursive', ImageFiles)
这样就可以一次性获取所有图片。
3.代码解析
说到halcon对于文件系统的支持算子,再多介绍几个
打开txt文本文件,写入字符串,关闭文本文件
open_file ('intensity.txt', 'output', FileHandle)
fwrite_string (FileHandle, Mean + ' ' + Deviation)
close_file (FileHandle)
判断该路径下的文件是否存在
* This call to file_exists should return FALSE (0) in FileExists
file_exists (FileName, FileExists)
在写入txt文本文件中写入新的一行
open_file ('area.dat', 'output', FileHandle)
for i := 1 to Number by 1
select_obj (Regions, Selected, i)
area_center (Selected, Area, Row, Column)
fwrite_string (FileHandle, i + ' ' + Area)
fnew_line (FileHandle)
endfor
close_file (FileHandle)
创建文件夹,删除文件夹
make_dir (ExampleDir)
remove_dir (ExampleDirs[Index - 1])
获取halcon本身的一系列参数
get_system ('version', HalconVersion)
get_system ('file_version', HalconFileVersion)
get_system ('last_update', HalconDate)
get_system ('halcon_arch', HalconArchitecture)
get_system ('halcon_xl', HalconXL)
get_system ('edition', HalconEdition)
get_system ('library_fullname', HALCONLib)
get_system ('operating_system', OSName)
get_system ('operating_system_version', OSVersion)
get_system ('locale_raw', LocaleRaw)
get_system ('locale_codeset', LocaleCodeset)
get_system ('filename_encoding', HlibEncoding)
get_system ('halcon_arch', HalconArch)
get_system ('example_dir', ExampleDir)
get_system ('image_dir', ImageDir)
get_system ('3d_model_dir', Model3DDir)
get_system ('help_dir', HelpDir)
get_system ('processor_num', ProcessorNum)
get_system ('thread_pool', ThreadPool)
get_system ('thread_num', ThreadNum)
get_system ('parallelize_operators', AOP)
get_system (SIMDExtensions[I] + '_supported', Information)
get_system ('do_low_error', LLE)