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.文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/674080.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【CMake】CMake入门(五)打包安装程序 使用CMake管理库 打包调试版和发行版

本篇文章不是新手入门教学文章,主要是记录笔者个人的学习笔记 CMake入门(五) 一、打包二、使用CMake管理库三、打包调试版和发行版 一、打包 发布程序可以有多种形式,比如安装包、压缩包、源文件等。CMake也提供了打包程序cpack可…

电脑数据恢复,6个方法,恢复文件很简单!

“我在使用电脑时,一个不小心就误删了部分重要数据,现在想恢复电脑数据却不知怎么操作了,希望大家帮帮我!” 在数字化时代,电脑数据不仅是工作和学习的重要载体,更是我们生活中珍贵的记忆和情感的存储地。然…

二叉树创建和遍历(及相关OJ题)

个人主页 :敲上瘾-CSDN博客二叉树介绍:二叉树(详解)-CSDN博客 目录 一、二叉树的创建 二、二叉树的遍历 1.前序遍历 2.中序遍历 3.后序遍历 4.层序遍历 三、相关计算 1.总节点个数计算 2.叶子节点个数计算 3.深度计算 一、二叉树的创建 关于…

❤机器学习正则化算法的总结。耗时10个小时完成。❤

❤纯 干 货~❤ 目录 纯干货 1、L1 正则化(Lasso 正则化) 2、L2 正则化(岭正则化) 3、弹性网络正则化(Elastic Net 正则化) 4、Dropout 正则化(用于神经网络) 5、贝叶斯Rid…

风力发电机常见故障分析

风力发电机常见故障分析 风力发电机是风电机组中的核心部件,其运行的可靠性和稳定性对整个风电系统的发电效率至关重要。然而,由于复杂的机械结构和长期暴露在严酷环境中,风力发电机在运行过程中可能会出现各种故障。本文将详细介绍风力发电…

【Linux】深入理解文件操作:从C语言接口到系统调用与缓冲区管理

文章目录 前言:1. 铺垫2. 重新使用C文件接口:对比一下重定向2.1. 什么叫当前路径?2.2. 写入文件2.3. 读文件2.4. 程序默认打开的文件流2.5. 输出2.6. 输入 3. 系统调用提供的文件接口3.1. open 打开文件3.2. open函数返回值 4. 缓冲区问题总结…

MongoDB~索引使用与优化

Study by: https://docs.mongoing.com/indexeshttps://www.cnblogs.com/Neeo/articles/14325130.html#%E5%85%B6%E4%BB%96%E7%B4%A2%E5%BC%95 作用 如果你把数据库类比为一本书,那书的具体内容是数据,书的目录就是索引,所以索引…

【随笔】Git 实战篇 -- 开心 commit 之后,发现有一处bug还需要改,只能 reset 撤销然后再次提交 -- git reset --(四十三)

💌 所属专栏:【Git】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢迎大…

RabbitMQ小结

MQ分类 Acitvemq kafka 优点:性能好,吞吐量高百万级,分布式,消息有序 缺点:单机超过64分区,cpu会飙高,消费失败不支持重试 , Rocket 阿里的mq产品 优点:单机吞吐量也…

如何赋予LLM多模态能力(MLLM)

基本概念 多模态大型语言模型(MLLMs)是人工智能领域的一项前沿技术,旨在设计能够理解和生成跨越多种形式数据输入(如文本和图像)内容的模型。 链接文本和视觉模态:MLLMs能够整合文本和视觉数据源的信息。…

众汇:外汇狙击指标如何使用?

对于投资者来说,我们各位交易的目的是什么?WeTrade众汇认为那就是盈利。所以来说有一个指标对各位投资者来说那是相当有帮助的。这是因为对于交易者而言,利用这些指标可以快速识别盈利的买卖时机。当我们选择一个指标之后,深入了解其适用范围…

【机器学习】机器学习与AI大数据的融合:开启智能新时代

📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 机器学习与AI大数据的融合 📒1. 引言📕2. 机器学习与大数据🎩机器学习与大数据的特征🎈大数据如…

基于全志T507-H的Linux-RT实时性测试案例分享

本文将为各位工程师演示全志T507-H工业评估板(TLT507-EVM)基于IgH EtherCAT控制伺服电机方法,生动说明Linux-RT Igh EtherCAT的强大之处! Linux-RT系统的优势 内核开源、免费、功能完善。 RT PREEMPT补丁,使Linux内…

树形结构获取所有直属父级节点

递归获取 let arr [{name: "/",meta: {},children: [{name: "home",},{name: "home2",},{name: "common-components",children: [{name: "form-component",}]},{name: "multilevel-menu",children: [{name: &qu…

【数据结构】复杂度的重要性—–决定程序运行的效率

【数据结构】复杂度的重要性—–决定程序运行的效率 前言 在我们写算法的时候,常常会需要考虑一个问题:这个算法好不好?而这个“好”实际上就取决于是算法的复杂度。 算法复杂度(Algorithmic Complexity)是指算法在编…

粒子系统技术在AI绘画中的创新应用

引言: 随着人工智能技术的飞速发展,AI绘画已经成为艺术创作和数字媒体领域的一大热点。粒子系统作为一种模拟复杂物理现象的技术手段,其在AI绘画中的应用为创作过程带来了前所未有的灵活性和创新性。本文将深入探讨粒子系统技术的原理、特点以…

Nvidia Jetson/Orin +FPGA+AI大算力边缘计算盒子:人工智能消防应用

青鸟消防股份有限公司成立于2001年6月,于2019年8月在深圳证券交易所挂牌上市,成为中国消防报警行业首家登陆A股的企业。公司始终聚焦于消防安全与物联网领域,主营业务为“一站式”消防安全系统产品的研发、生产和销售。公司产品已覆盖了火灾报…

【Linux 网络】高级 IO -- 详解

一、IO 的基本概念 I/O(input/output)也就是输入和输出,在冯诺依曼体系结构当中,将数据从输入设备拷贝到内存就叫作输入,将数据从内存拷贝到输出设备就叫作输出。 对文件进行的读写操作本质就是一种 IO,文…

近邻算法详解:原理、Java实现及应用场景

摘要 近邻算法(Nearest Neighbor Algorithm)是一类基于实例的学习方法,广泛应用于分类和回归问题中。最常见的近邻算法是K近邻算法(K-Nearest Neighbors, KNN),其基本思想是通过计算待分类样本与训练样本的…

内网渗透-详解代理逻辑及隧道

写在前面 红蓝对抗过程中打点以后往往需要进行内网渗透和横向移动,因此大家都需要扎实掌握代理和隧道知识,一款优秀的代理工具也可以给内网渗透带来很大的收益。 1.正向代理: 代理客户端,帮助客户端完成所需请求。 举例&#x…