机器视觉_HALCON_HDevelop用户指南_3.用HDevelop采集图像

news2024/11/15 8:50:27

文章目录

  • 三、用HDevelop采集/获取图像
    • 3.1. 从文件中读取图像
    • 3.2. 查看图像
    • 3.3. 图像采集助手
      • 3.3.1. 从文件或文件夹中获取图像
      • 3.3.2. 通过图像获取接口获取图像
      • 3.3.3. 修改生成的代码


三、用HDevelop采集/获取图像

本章节标题的英文是Image Acquisition,直译是图像采集或图像获取。工业视觉系统中往往使用相机来获取图像,这个过程叫图像采集可能好一些;但是中文版的HDevelop中,是翻译成图像获取的,可能更通用一些。下文有时用图像采集,有时用图像获取,反正大概就是那个意思,希望不要过于纠结。

图像采集对于一个机器视觉系统来讲是至关重要的。在整个项目周期中,它处于早期阶段(通常早于编程)。本节探索在HDevelop中各种图像采集的方式。

3.1. 从文件中读取图像

在原型设计阶段(prototyping phase),通常会有一组样例图片。HDevelop(确切说是底层的HALCON库)支持多种格式的图片,这些格式的图片可以直接被加载(图像加载详情可查阅参考手册中的 read_image)。

拖放
读取图像最简单的方式是从文件浏览器(file browser)中拖动一个图像文件并放置在HDevelop窗口。当文件放下时,HDevelop会自动打开一个 读取图像 对话框,如下图。
在这里插入图片描述
该对话框显示图像的完整路径,并自动从文件名提取出派生的变量名(会根据图片原来的名称生成一个变量名)。该变量名是可编辑的,或者你也可以从下拉列表中选择当前程序的另一个图标变量名。

此外,图像预览和图像基本属性也会显示在该对话框中(长宽、颜色类型、通道数量)。若你选错了图片,可以点击文件名右侧的按钮来打开同一文件浏览器再次选择。 在这里插入图片描述
点击该按钮将打开操作系统本地文件浏览器,即,在Windows上你也许能在对话框中看到文件缩略图。此时选中其他图像,对话框也会随之更新。

当你单击 确定 按钮,指令 read_image 会被添加到当前程序。通过设置 插入位置 ,你可以决定指令被放置在 IC 还是 PC上。若你突然不想读取图片了,可以点击 取消
多文件拖放
可用将多个图像或包含多个图像的文件夹拖到HDevelop中。HDevelop将打开一个图像助手,其中包含预选的图像。
选定目录的图像
除了拖放图像,在HDevelop中还有一个等效的方法: 选中 文件=>读取图像 来获取描述图像的对话框。从对话框中浏览然后选中想要的图像,点击确定以将所选图像添加到程序中。

3.2. 查看图像

按上节描述读取图像后,图像会自动显示在激活的图形窗口中。这是HDevelop的默认行为,但如果你需要,也可以禁止图像的自动显示,如,为了加快计算密集型程序的速度,有时就需要这么做。

最初,加载的图像会填充满整个图形窗口。因为图形窗口本身并没有调整大小(而图像又强行填充满整个窗口),所以图像的纵横比可能不对。使用图形窗口的工具箱,可以轻松缩放图像,或根据图像改变窗口大小。

一般建议调整窗口大小至图像大小,否则显示会变慢。图像大小、窗口大小和图像的显示部分都可在图形窗口的工具栏进行设置。

加载图像的图标视图(iconic view,有点像缩略图)会显示在变量窗口中。当图形窗口中的图像被清除时,可以通过双击此图标来恢复。
在这里插入图片描述
下图是图形窗口的工具栏,
在这里插入图片描述
序号标注分别表示:
①清空图形窗口(单击后图形窗口中显示的图像消失)
②选择(选择模式,鼠标左键点击可以选中图像对象)
③移动(移动模式,按住鼠标左键可以移动窗口中的内容)
④放大镜
在这里插入图片描述

⑤缩放图片
⑥调整图像大小至窗口大小(图像适应窗口)
⑦调整窗口大小至图像大小(窗口适应图像)
⑧ROI工具(感兴趣区域)
在这里插入图片描述

3.3. 图像采集助手

图像采集助手(image acquisition assistant)是一个功能强大的工具,它能通过图像获取接口(image acquisition interface),从HALCON支持的文件(包括AVI文件)、文件夹和图像采集设备中获取图像。要使用图像采集助手,选中 助手>打开新的Image Acquisition
在这里插入图片描述
此时会打开一个新的窗口(即图像采集助手),显示如下,
在这里插入图片描述
该窗口有多个选项卡(tab card),你可以按照选项卡从左往右的顺序依次操作下去。最终,助手会生成HDevelop代码,以插入到当前程序中。选中图像采集助手的菜单中的 帮助 项,可以打开在线帮助文档。

资源(source,其实我觉得翻译成 源 好一点) 选项卡确定采集方法和图像源。默认设置中,图像是从文件中获取的,下一小节会做详细描述。当然,也可以从图像采集设备(如摄像机、采集卡)获取图像。

3.3.1. 从文件或文件夹中获取图像

你可以指定图像加载的图像文件或目录(directory,文件夹/目录)。选中 资源 选项卡中的 图像文件 单选按钮(radio button)。你可以直接在文本框中输入图像名或目录名,多个图像名会以 ; 分隔。通常,使用 以下按钮会更方便:
在这里插入图片描述
点击 选择文件 按钮,HDevelop在当前工作目录中打开一个文件选择对话框,里面会显示HALCON支持的图像文件。可以通过按下 Ctrl 键,然后鼠标点击进行多选。点击 打开 以确认选择。第一个选中的图像会显示在活动的图形窗口中。
在这里插入图片描述
点击 选择路径 按钮,HDevelop会打开一个目录浏览器。目前无法选择多个目录。点击 选择文件夹 以确认选择。所选目录的第一个图像会显示在活动的图形窗口中。若勾选了 递归 复选框在这里插入图片描述
,则还会扫描指定目录的所有子目录以查找图像。

查看所选图像

在这里插入图片描述
上图是与浏览所选图像相关的按钮,序号标注的分别是:
①连接
②采集(单步执行)
③实时(连续显示)
通过点击 采集 按钮,可以单步浏览所选图像。每次点击该按钮,下一张图片就会显示在图形窗口中。也可以点击 实时 按钮循环播放图像,这对动画来讲很有用。两种功能也可以从菜单上使用。

生成代码
切换至 代码生成 选项卡,并在 图像对象 文本框中指定变量名。之后,便能在程序中通过该变量名访问图像。若在 资源 选项卡中选择了多个图像或一个文件夹,图像采集助手将循环读取图像。

循环计数(Loop Counter):
循环索引变量的名称。在程序中遍历图像时,该变量将包含当前图像的对象编号。

图像文件:
变量的名称将包含所选图像名称。
在这里插入图片描述
点击 代码预览 可以查看当前参数生成的代码。
点击 插入代码 可以生成代码,并将其插入到当前程序IC的位置。

下面代码段是从三个选定图像中生成的示例。它是一个独立的HDevelop程序,运行时无需修改。

* Image Acquisition 03: Code generated by Image Acquisition 03
ImageFiles := []
ImageFiles[0] := 'W/codabar/codabar01.png'
ImageFiles[1] := 'W/codabar/codabar02.png'
ImageFiles[2] := 'W/codabar/codabar03.png'
for Index := 0 to |ImageFiles| - 1 by 1
    read_image (Image, ImageFiles[Index])
    * Image Acquisition 03: Do something
endfor

3.3.2. 通过图像获取接口获取图像

选中 资源 选项卡中的 图像获取接口 。单选按钮下方的下拉列表变为激活状态。最初,它列出了所有HALCON支持的图像获取接口。可以通过点击 自动检测接口 按钮①来整理该列表。接着HDevelop会探测所有图像获取接口,并移除那些没有响应的接口。探测接口可能会导致系统由于错误安装的驱动程序或硬件故障而挂起。若当前程序中有未保存的更改,HDevelop会显示警告对话框。建议保存修改后再继续操作。你也可以忽略警告并继续执行,或中止操作。探测完接口后,可以从列表②中选择所需的图像获取接口。

选中图像采集助手菜单栏中的 助手 项将打开所选图像获取接口的帮助文档。
在这里插入图片描述
连接设备

一旦选中图像获取接口,它的连接参数就会被检测并更新到 连接 选项卡。在这,你可以指定连接到所选图像获取接口的设备。例如,如果选择了多摄像头的图像采集卡板接口作为源,则可以在此处选择实际的设备。该选项卡的参数在算子 open_framegrabber 的参考部分有一般性描述;详情参考所选接口的HTML页面(菜单帮助)。
在这里插入图片描述

若获取接口选的是 文件 ,会有两个按钮分别可用于选择图像文件或图像目录。文件 接口也支持 AVI 文件或 序列文件(.seq)。后者是HALCON特有的;它包含一个会被连续加载的图像文件名列表。

指定所需的连接参数,然后点击 连接 ,以建立和更新与实际设备的连接。连接状态也可以在工具栏中切换。

点击 采集 按钮,可以抓取单个图像;点击 实时 按钮可以连续抓取。实时 模式可以再次点击相同按钮来停止。

单击 检测 按钮将尝试重新检测当前所选图像获取接口的有效参数。通常,从 资源 选项卡的列表中选择接口时,它会自动完成。

所有重置 按钮会将所有连接参数设置为默认值。

设备参数设置

参数 选项卡包含了所选设备特有的(特有指的是不同设备的参数列表是不同的)参数列表。一旦连接到设备,参数选项卡就会被激活。
下面有一份参数列表示例。参数的范围可以用种类(category)和可视度(visibility)来限制。详情请参阅所选接口的HTML页面。可以单击助手的帮助按钮,自动进入相应页面。

参数类型不同,调整参数值的方法也不同。例如,通过拖动滑块或参数输入值可以指定具有已定义范围值的参数。若值发生变化,右侧的重置按钮会被激活。而有些参数则提供了一个复选框(checkbox),若单击该复选框,将自动设置参数。

更新图像 被勾选,参数变动会马上通过获取新图像反映在图形窗口中。 刷新 按钮会更新参数列表,若参数有副作用,这将会很有用(可以马上看到效果)。点击 所有重置 按钮,可以重置所有参数回到默认值。
设备特有参数
代码生成

代码生成 选项卡中,在其它选项卡上所做的设置被转化为可执行的代码。代码的基本结构和相应的变量名可以被指定。

控制流
在这里插入图片描述
仅初始化(Initialization Only):仅生成代码——在其它选项卡中指定参数初始化图像获取接口,并适时关闭它。之后可添加用于图像采集和处理的额外代码。
采集单幅图像(Acquire Single Image):生成采集单幅图像的代码。
在循环中采集图像(Acquire Images in Loop):在图像采集代码周围添加一个循环。可以在此循环中添加进一步的处理。

图像获取接口由句柄来寻址。此句柄的变量名可在 连接句柄(Connection Handle) 的文本框中指定。获取图像的变量名在 图像对象(Image Object) 中指定。

单击 代码预览 以查看生成的代码。单击 插入代码 以生成代码,插入至程序窗口的IC处。

在这里插入图片描述
下面是一份示例代码:

* Image Acquisition 01: Code generated by Image Acquisition 01
open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', '[0] ', 0, -1, AcqHandle)
grab_image_start (AcqHandle, -1)
while (true)
    grab_image_async (Image, AcqHandle, -1)
    * Image Acquisition 01: Do something
endwhile
close_framegrabber (AcqHandle)

3.3.3. 修改生成的代码

生成的代码插入到程序窗口后,HDevelop在内部会将代码链接至相应的助手。该链接会一直保持,直到使用菜单项 文件>退出助手 来退出助手。若使用菜单项 文件>关闭对话框 或使用窗口的关闭图标来关闭助手,该助手可从菜单 助手 的顶部恢复。

你可以更改助手中的设置并相应地更新生成的代码。代码预览会显示生成的代码行将如何更新。此外,你可以删除生成的代码行,或释放它们。当代码行被释放时,助手与这些行之间的内部链接会被切断。之后,同一助手可以在当前程序的不同位置生成额外的代码。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信小程序跳转页面三种方式

wx.navigateTo 保留当前页面,跳转到应用内的某个页面。但是不能跳到 tabbar 页面。使用 wx.navigateBack 可以返回到原页面。小程序中页面栈最多十层。 wx.navigateBack 关闭当前页面,返回上一页面或多级页面。可通过 getCurrentPages 获取当前的页面…

搜索入门技能树

搜索地址 以下哪个网址不能用来搜索: https://so.csdn.net/so/searchhttps://so.csdn.net/waphttps://devbit.csdn.net/searchhttps://dev.csdn.net/ 搜索频道 以下哪个不属于搜索频道: 全站博客下载图片 技能树 在搜索结果页展示的技能树模块中&am…

51单片机学习笔记-2数码管显示

2 数码管显示 [toc] 注:笔记主要参考B站江科大自化协教学视频“51单片机入门教程-2020版 程序全程纯手打 从零开始入门”。 注:工程及代码文件放在了本人的Github仓库。 2.1 静态数码管显示 2.1.1 原理介绍   LED数码管:数码管是一种简单…

办公技巧:分享7个非常实用的PPT技巧

❤️作者主页:IT技术分享社区 ❤️作者简介:大家好,我是IT技术分享社区的博主,从事C#、Java开发九年,对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️荣誉: CSDN博客专家、数据库优质创作者🏆&…

分享14个你可能还未用上但又实用的CSS属性

大家好,今天分享 14 个实用的CSS属性,你可能还未用上,这些 CSS 属性将帮助你提高开发的效率,本篇文章将介绍上半部分,废话不多说,我们快来了解下吧。一、:in-range 和 :out-of-range 伪类:in-range 和 :out…

域内权限维持:DSRM后门

01、简介 每个域控制器都有一个目录还原模式(DSRM)帐户,它的密码是在安装域控时设置的,实际上它对应的就是sam文件里的本地管理员“administrator”,基本很少会被重置,因此有着极强的隐蔽性。攻击者通过获取域控的DSRM密码&#x…

分布式事务| 使用 dotnetcore/CAP 的本地消息表模式

本地消息表模式本地消息表模式,其作为柔性事务的一种,核心是将一个分布式事务拆分为多个本地事务,事务之间通过事件消息衔接,事件消息和上个事务共用一个本地事务存储到本地消息表,再通过定时任务轮询本地消息表进行消…

运放电路中输入失调电压Vos及温漂-运算放大器

实际运放与理想运放具有很多差别,要理解这些差别,就必须认识实际运放的参数。下图是用于描述实际运放几个关键参数的等效模型。模型中,第一个黄色运放是一个近似的理想运放,只有Auo不是无穷大,其余都是理想的。第二个运…

【GD32F427开发板试用】 CAN总线收发测试

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站。作者:meijing 这篇测试下CAN通信的收发测试,代码使用库例程中修改。 硬件部分 测试用到了CAN0、串口0和定时器1。 1> CAN0使用的接…

ccflow代码

ccflow代码目录概述需求:设计思路实现思路分析1.什么是流程版本管理?流程讲义:参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better r…

企业如何利用制造业ERP管理系统做好仓库管理?

仓库管理,对于生产制造型企业来说是重中之重,很多制造企业的大部分”身家“,都在仓库里了。众多的原材料和堆积如山的成品、半成品,往往占用了企业大部分的流动资金。来料是否及时,物料是否齐备,库存是否安…

流程引擎与应用系统分布式部署架构

一、为什么应用系统和流程引擎需要分开部署 有句话讲:存在即合理。在实际的企业应用需求里有如下几种场景,需要把业务系统和流程引擎分开部署。 企业流程治理需求。即整个企业只部署一套流程平台BPM,也叫企业级流程中心BPM、或者跨系统端到…

canal数据同步安装、使用

canal源码仓库:https://github.com/alibaba/canal博主使用的是canal 1.5.5版本 MySQL 5.7.32 JDK:1.8 canal各个版本:https://github.com/alibaba/canal/releasescanal-adapter下载 canal-admin 下载 canal-deployer 下载上传到目标服务器对应目录下解压…

初识ros-Navigation

最近一直在看京天Turtlebot3 waffle pi的导航部分,这篇文章就介绍一下相关内容。导航模块是一个独立完整的模块,内容比较多也很深入。因为笔者没有看过源码,只是一些概念上的了解,做个整理,为后续的源码阅读做准备。本…

苏嵌实训——day16

文章目录一、进程间通信:1.传统通信方式:2. IPC通信方式(第五代操作系统):(1)传统通信之无名管道(2)传统通信方式之有名管道(3)使用有名管道来实现…

Python实现清除文件夹中重复视频

目录一、二进制文件二、摘要算法(MD5)三、shutil模块四、视频清除视频全在一个文件夹里视频在不同的文件夹里一、二进制文件 二进制文件是以文本的二进制形式存储在计算机中。 用户一般不能直接读取它们,需要通过相应的软件才能将其显示出来。 二进制文件一般是可…

jspssm大学生宿舍管理系统-宿管带前端

目录 摘 要 II Abstract III 1 绪论 1 1.1 课题背景 1 1.2 课题研究现状 1 1.3 初步设计方法与实施方案 2 1.4 本文研究内容 2 2 系统开发环境 4 2.1 JSP技术 4 2.2 B/S架构 5 2.3 Eclipse环境配置 5 2.4 MySQL数据库 6 3 系统分析 7 3…

【微服务】Docker容器化

🚩本文已收录至专栏:微服务探索之旅 👍希望您能有所收获 一.引入 (1) 为什么需要Docker 微服务虽然具备各种各样的优势,但服务的拆分的非常多给部署带来了很大的麻烦。 分布式系统中,依赖的组件非常多,不同…

【1】Python基础语法

字面量 字面量:在程序中,被写下来的固定值,称之为字面量。Python中常用的6种数据类型: 字符串(string),又称文本,是由任意数量的字符如中文、英文、各类符号、数字等组成&#xff0…

虚拟化技术学习笔记10

虚拟机镜像管理 学习目标: 能够了解KVM虚拟机支持的镜像格式 能够使用qemu-img实现镜像创建 能够使用qemu-img实现镜像查看 能够使用qemu-img实现镜像格式转换 能够了解后备镜像的作用 能够了解差量镜像的作用 能够基于后备镜像制作差量镜像 能够使用差量镜…