很明显,图像的采集是所有机器视觉应用中必须解决的问题,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. tensorflow2.0学习笔记第一章第四节

    1.4神经网络实现鸢尾花分类 import tensorflow as tf from sklearn import datasets import pandas as pd import numpy ...

  2. JNI_day02

    二级指针 指向指针变量的指针,保存指针的地址 结构体 struct Student //struct Stdent 学生结构体类型 { int id;//成员 char name[20]; int a ...

  3. Centos 7 k8s Deployment新副本控制器

    一.概念 Kubernetes提供了一种更加简单的更新RC和Pod的机制,叫做Deployment.通过在Deployment中描述你所期望的集群状态,Deployment Controller会将在 ...

  4. vue2.0 + Element UI + axios实现表格分页

    注:本文分页组件用原生 html + css 实现,element-ui里有专门的分页组件可以不用自己写,详情见另一篇博客:https://www.cnblogs.com/zdd2017/p/1115 ...

  5. 测试-spring源码摘取

    首次加载idea是真的慢... 也许是我电脑性能太差... 我分析他内部有一套索引的机制,需要每次打开现建立... 没有固态的话,首次打开还不如eclipse 第一次使用博客园,以前都在csdn混~ ...

  6. CAT12提取surface指标

    介绍 基于表面的形态学分析(VSM)的方法被越来越多的研究者使用.本文主要介绍基于SPM12和CAT12工具包进行ROI-based VSM的处理步骤. 方法 本文数据处理使用的工具是MATLAB,S ...

  7. FFT,NTT入门

    目录 -1.前置知识 复数 单位根 单位根反演 0.卷积 1.FFT -1.前置知识 复数   复数单位\(i\):定义为\(i^2=-1\).\(i\)可以直接参与运算.   复数:形如\(z=a+ ...

  8. (二)log4j 配置详解

    原文链接:https://blog.csdn.net/liupeifeng3514/article/details/79625013 1.配置根logger log4j.rootLogger = de ...

  9. Pytorch中的自动求梯度机制和Variable类

    自动求导机制是每一个深度学习框架中重要的性质,免去了手动计算导数,下面用代码介绍并举例说明Pytorch的自动求导机制. 首先介绍Variable,Variable是对Tensor的一个封装,操作和T ...

  10. IDEA之maven配置详解

    这两天被maven配置搞得焦头烂额,前后忙活了三天才彻底搞定. 下面我总结一下配置的步骤. 步骤 1. 首先去maven官网去下载maven,http://maven.apache.org/ 这里教大 ...