很明显,图像的采集是所有机器视觉应用中必须解决的问题,HALCON提供了为各种图像采集设备执行这种交互的接口,图像采集的任务被简化为几行代码,只需几个操作符的调用,更重要的是,这种简单并不是以限制可用功能为代价。使用HALCON,可以在不同的时间模式下从不同的采集设备和相机中获取图像。除了从相机中获取图像外,HALCON还可以将存储在文件中的图像显示出来(支持的文件格式:BMP、TIFF、GIF、JPEG、PNG、PNM、PCX、XWD)。

基本概念

用HALCON获取图像基本上只需要三个步骤,而从文件中读取图像则更为简单:只需调用read_image操作符即可。

打开图像采集设备

如果想从一个摄像机中获取图像,第一步就是要连接到这个设备。HALCON可以解决所有与设备相关的细节问题;只需要调用算子 open_framegrabber,指定相应的图像采集接口名称。

还有一个 "虚拟 "的图像采集界面叫File。顾名思义,这个 "抓帧器 "读取文件中的图像,以及所谓的图像序列文件。后者是Halcon特有的文件类型,典型的扩展名是.seq,它们包含一个图像文件名的列表,用新的行隔开(可以用文本编辑器很容易地创建它),如果你链接到这样的序列,随后调用grab_image就会返回文件中指定的序列图像。 然后,不必创建一个序列文件,而只需指定目录名称而不是序列文件作为参数'CameraType'的值。后续调用grab_image会返回在指定的图像目录中找到的图像。如果想用图像文件序列或者在真实的图像采集设备上来测试应用程序,那么以上这两种方法都很有用。

获取图像

连接到设备后,只需调用grab_image就可以获取图像。

要从磁盘中加载图像,需要使用read_image,图像会在当前目录中和当前设备环境变量HALCONIMAGES指定的目录中被搜索到。

关闭图像采集设备

在应用程序结束时,可以使用运算符close_framegrabber关闭与图像采集设备的连接以释放其资源。

例子

如前所述,从文件中获取图像调用对应的一个运算符:

read_image(Image,'particle')

下面的代码处理从图像序列中读取的图像:

SequenceName:='pendulum/pendulum.seq'
open_framegrabber('File',-1,-1,-1,-1,-1,-1,'default',-1,'default',-1,'default',SequenceName,'default',-1,-1,AcqHandle)
while(ImageNum<=MaxImageNum)
grab_image(Image,AcqHandle)
...处理图像...
ImageNum := ImageNum+1
endwhile

扩展概念

在实际应用中,通常不需要让摄像机来获取图像,而重要的是在正确的时刻或速率下获取图像,并且摄像机和图像采集接口都要有合适的参数。因此,HALCON允许进一步参数化采集过程。在HDevelop中,通过菜单项Assistants>Image Acquisition提供了一个助手,它可以帮助选择图像源,调整参数,并生成合适的代码。

打开图像采集设备

当用open_framegrabber连接到图像采集设备时,主要参数是对应的HALCON图像采集接口的名称,因此,会得到一个所谓的handle,可以用它来访问该设备,例如,用grab_image或grab_image_async来采集图像。

通过open_framegrabber的其他参数,可以描述图像采集设备和摄像机的配置,在这里使用更多完整的配置时是必要的,例如,多个摄像机连接到不同的采集卡的不同端口。更多的参数允许指定所需的图像格式(尺寸,分辨率,像素类型,颜色空间)。这些参数中大多数都有默认值,如果想使用这些参数,可以使用指定 "default"(字符串参数)或 -1(数字参数)。

通过算子info_framegrabber,可以查询接口的版本号、可用的板卡、端口号和摄像机类型等信息。

设置参数

如上所述,在连接到图像采集设备时,已经设置了一些参数,如open_framegrabber。这些参数(图像采集设备/摄像机的配置和图像大小等)是所谓的通用参数,因为它们几乎是所有图像采集接口所共有的。然而,图像采集设备在所提供的功能上有很大的不同,导致了有更多的特殊参数。这些参数可以通过算子set_framegrabber_param进行自定义。

通过算子get_framegrabber_param,可以查询普通参数和特殊参数的当前值。

采集图像

实际上,在实际机器视觉应用中,不会使用算子grab_image来获取图像,而是使用grab_image_async。这两个操作符的区别如下。如果在循环中获取和处理图像 grab_image总是请求获取一个新的图像,然后暂停程序,直到获取完成。然后,对图像进行处理,之后,程序等待下一张图像。相反,当使用 grab_image_async 时,图像的采集和处理是并行的。当一幅图像 处理完毕,下一张图像已经在采集中,大大加快了应用程序在处理图像的速度。

HALCON提供了更多的图像采集模式,例如,通过外部信号触发采集或从多台相机同时采集图像(现实场景中经常用到)。有兴趣的话可以了解一下。

涉及算子

打开图像采集设备

基础:open_framegrabber

高级:info_framegrabber

设置参数

基础:set_framegrabber_param, get_framegrabber_param

采集图像

基础:read_image, grab_image, grab_image_async

打开图像采集设备

基础:close_framegrabber

进阶

直接访问内存中的外部图像

还可以将外部创建的图像(即计算机内存中的原始图像矩阵)传递给HALCON。

使用操作符gen_image1、gen_image3、gen_image1_extern或gen_image3_extern。

不支持的图像采集设备

如果想使用 HALCON 目前不支持的图像采集设备,也就是说,HALCON不支持的设备,可以创建自己的接口。创建和使用HALCON接口方法可从MVTec的网络服务器下载图像采集接口以及可作为集成基础的模板源代码,网址为http://www.mvtec.com/products/interfaces。

Halcon采集图像Image Acquisition解析的更多相关文章

  1. vs联合halcon——采集图像(实时采集与单次采集)

    摘要 在对vs进行环境配置好以后,就可以开始与halcon联合进行实战.本篇就对图像的采集进行总结.通过构建采集相机GrabImage类的三个方法实现图像的采集: open() 打开相机 grabim ...

  2. Halcon WPF C#采集图像区域灰度值

    源码下载地址:https://github.com/lizhiqiang0204/ImageGray.git Halcon代码如下: *读取图片,转换成灰度图片 read_image (Image1, ...

  3. Halcon一维测量官方案例解析

    下面的例子简要介绍了如何使用HALCON的一维测量工具.最长的部分是预处理和后处理:测量本身只包括两个操作符调用. 测量保险丝-fuse 预处理主要是测量线的生成.在示例程序中,这个步骤是通过将测量对 ...

  4. camera按键采集图像及waitKey的用法(转)

    源: camera按键采集图像及waitKey的用法

  5. camera按键采集图像及waitKey的用法

    前言 项目需要通过摄像头采集图像并保存,主要是用于后续的摄像头标定.实现过程其实很简单,需要注意一些细节. 系统环境 系统版本:ubuntu16.04:opencv版本:opencv2.4.13:编程 ...

  6. Camera 采集图像的方法

    使用 Camera 采集图像, 实现步骤如下: 需要权限: android.permission.CAMERA android.permission.WRITE_EXTERNAL_STORAGE // ...

  7. halcon采集一幅图像

    **顺序也很重要,必须现有窗口,才能设置属性 dev_close_window()dev_open_window (0, 0, 1400, 1200, 'black', WindowHandle)de ...

  8. halcon连续采集图像

    dev_close_window()dev_update_window('off')create_bar_code_model ([], [], BarCodeHandle)dev_open_wind ...

  9. halcon二 图像校正

    1.get_image_size(Image : : : Width, Height) 返回图像的尺寸. 2.parameters_image_to_world_plane_centered (Cam ...

随机推荐

  1. ping外网:unknown host www.baidu.comc排查

    ping 百度出现:(ping www.baidu.com) "ping: unknown host www.baidu.com"    1.ping 网关确定是否连接上路由器,并 ...

  2. ecshop php商城系统数据库结构及表的介绍分析

      ecshop共86张表,确实比较多,不过功能确实最完善的. 表结构分析 ecs_account_log // 用户账目日志表 ecs_activity // 活动表(代码,名称,开始,结束,描述) ...

  3. @codefoces - 1313E@ Concatenation with intersection

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定两个长度为 n 的字符串 a, b 与一个长度为 m 的字符 ...

  4. Docker学习 ,超全文档!

    我们的口号是:再小的帆也能远航,人生不设限!!        一.学习规划: Docker概述 Docker安装 Docker命令 Docker镜像 镜像命令 容器命令 操作命令 容器数据卷  Doc ...

  5. Install Centos7 on VirtualBox in mac

    Step 1:准备虚拟机及镜像 下载合适的Virtual Box版本 官方下载链接:https://www.virtualbox.org/wiki/Downloads 这里选择的版本是:https:/ ...

  6. 使用python解线性矩阵方程(numpy中的matrix类)

    这学期有一门运筹学,讲的两大块儿:线性优化和非线性优化问题.在非线性优化问题这里涉及到拉格朗日乘子法,经常要算一些非常变态的线性方程,于是我就想用python求解线性方程.查阅资料的过程中找到了一个极 ...

  7. CODING DevOps 系列第四课:DevOps 中的质量内建实践

    什么是质量内建 随着时间的推移,我们项目的开发效率会逐渐降低,直到几年之后整个项目可能就无法维护,只能推倒重来.具体的表现首先就是随着时间推移,我们会发现整个需求列表里面能做的需求越来越少,因为每当我 ...

  8. Java学习笔记5(API)

    Java API API(Application Programming Interface)指的是应用程序编程接口. String类 String初始化有两种,一个是使用字符串常量初始化一个Stri ...

  9. mysql大表在不停机的情况下增加字段该怎么处理

    MySQL中给一张千万甚至更大量级的表添加字段一直是比较头疼的问题,遇到此情况通常该如果处理?本文通过常见的三种场景进行案例说明. 1. 环境准备 数据库版本: 5.7.25-28(Percona 分 ...

  10. 三角函数与缓入缓出动画及C#实现(图文讲解)

    日常经常能看到缓入缓出的动画效果,如: 1,带缓入缓出效果的滚动条: 2,带缓入缓出效果的呼吸灯: 像上面这种效果,就是用到了三角函数相关的知识,下面将从头开始一步步去讲解如何实现这种效果. 一.基础 ...