文章目录
- 三、用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在内部会将代码链接至相应的助手。该链接会一直保持,直到使用菜单项 文件>退出助手 来退出助手。若使用菜单项 文件>关闭对话框 或使用窗口的关闭图标来关闭助手,该助手可从菜单 助手 的顶部恢复。
你可以更改助手中的设置并相应地更新生成的代码。代码预览会显示生成的代码行将如何更新。此外,你可以删除生成的代码行,或释放它们。当代码行被释放时,助手与这些行之间的内部链接会被切断。之后,同一助手可以在当前程序的不同位置生成额外的代码。