Halcon采集图像Image Acquisition解析
很明显,图像的采集是所有机器视觉应用中必须解决的问题,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解析的更多相关文章
- vs联合halcon——采集图像(实时采集与单次采集)
摘要 在对vs进行环境配置好以后,就可以开始与halcon联合进行实战.本篇就对图像的采集进行总结.通过构建采集相机GrabImage类的三个方法实现图像的采集: open() 打开相机 grabim ...
- Halcon WPF C#采集图像区域灰度值
源码下载地址:https://github.com/lizhiqiang0204/ImageGray.git Halcon代码如下: *读取图片,转换成灰度图片 read_image (Image1, ...
- Halcon一维测量官方案例解析
下面的例子简要介绍了如何使用HALCON的一维测量工具.最长的部分是预处理和后处理:测量本身只包括两个操作符调用. 测量保险丝-fuse 预处理主要是测量线的生成.在示例程序中,这个步骤是通过将测量对 ...
- camera按键采集图像及waitKey的用法(转)
源: camera按键采集图像及waitKey的用法
- camera按键采集图像及waitKey的用法
前言 项目需要通过摄像头采集图像并保存,主要是用于后续的摄像头标定.实现过程其实很简单,需要注意一些细节. 系统环境 系统版本:ubuntu16.04:opencv版本:opencv2.4.13:编程 ...
- Camera 采集图像的方法
使用 Camera 采集图像, 实现步骤如下: 需要权限: android.permission.CAMERA android.permission.WRITE_EXTERNAL_STORAGE // ...
- halcon采集一幅图像
**顺序也很重要,必须现有窗口,才能设置属性 dev_close_window()dev_open_window (0, 0, 1400, 1200, 'black', WindowHandle)de ...
- halcon连续采集图像
dev_close_window()dev_update_window('off')create_bar_code_model ([], [], BarCodeHandle)dev_open_wind ...
- halcon二 图像校正
1.get_image_size(Image : : : Width, Height) 返回图像的尺寸. 2.parameters_image_to_world_plane_centered (Cam ...
随机推荐
- CMDB 和自动化运维
目录 传统运维和自动化运维的对比 CMDB CMDB 的几种实现方式 传统运维和自动化运维的对比 1.企业中,项目的发布流程 产品经理调研需求 -->三方开会讨论(开发,产品,运维,测试) -– ...
- public、potected 、private继承下的子类对父类成员的访问情况
#include<iostream> #include<string> using namespace std; class parent{ protected: int m_ ...
- win10系统下office 2019激活
1.新建一个文本文件,创建批处理文件office.bat @echo off (cd /d "%~dp0")&&(NET FILE||(powershell sta ...
- 使用JFreeChart生成条形图
1. 准备工作 下载JFreeChart,我使用的版本为1.0.19,相关内容参见JFreeChart,下载链接为https://sourceforge.net/projects/jfreechart ...
- deepin双屏实现方式
先xrandr --listproviders看下有几个provider,如果有多个,那么可能是不同显示口在不同显卡上,运行xrandr --setprovideroutputsource 0 1或x ...
- cb51a_c++_STL_算法_根据第n个元素排序nth_element
cb51a_c++_STL_算法_根据第n个元素排序nth_elementnth_element(b,n,e),比如最大的5个数排序,或者最小的几个数nth_element(b,n,e,p)对比:pa ...
- WeChair项目Alpha冲刺(7/10)
团队项目进行情况 1.昨日进展 Alpha冲刺第七天 昨日进展: 前端:页面修改和完善,安排页面美化 后端:和前端成功交互,数据解密成功 数据库:修改数据表属性,与后端部署数据库交互 2.今日安 ...
- c#,pagerank算法实现一
PageRank让链接来"投票" 一个页面的“得票数”由所有链向它的页面的重要性来决定,到一个页面的超链接相当于对该页投一票.一个页面的PageRank是由所有链向它的页面(“链入 ...
- Mybatis各语句高级用法(未完待续)
更多的语法请参考官网 http://www.mybatis.org/mybatis-3/dynamic-sql.html# 环境:MySQL5.6,jdk1.8 建议:所有的参数加上@Param re ...
- spring boot actuator监控需要注意的点
1. /metrics接口提供的信息进行简单分类如下表: 分类 前缀 报告内容 垃圾收集器 gc.* 已经发生过的垃圾收集次数,以及垃圾收集所耗费的时间,适用于标记-清理垃圾收集器和并行垃圾收集器(数 ...