HALCON-从入门到入门-花式读取图片的N种方式

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)

4.文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄晓魚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值