机器视觉 halcon中图像获取
Posted 沧海一笑-dj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器视觉 halcon中图像获取相关的知识,希望对你有一定的参考价值。
00. 目录
文章目录
01. 概述
Halcon是一款图像处理软件。在Halcon中获取图像有3种方式:
- 使用硬件采集图像
- 直接读取采集好的图像
- 通过某些方法生成一张图像
02. 相机接口
2.1 USB接口
USB接口相机是数字相机,直接输出数字图像信号。USB全称是UniversalSerialBus(通用串行总线),USB接口是4“针”,其中2根为电源线、2根为信号线。USB是串行接口,可热拔插,连接方便。USB2.0,传输速度480Mbps,通讯距离5m,80%的带宽用于图像传输。USB3.0,传输速度4.8Gbps,通讯距离10m,80%的带宽用于图像传输。由于USB接口相机使用方便,接口广泛,目前在显微镜、科研实验、便携式设备等行业大量应用。
2.2 IEEE1394接口
1394接口,又称“火线”(FireWire),用于将数码产品与计算机及其他机器之间的连接。IEEE1394总线是高速串行总线,1394a最高的传输速度为400Mbps,1394b最高的传输速度为800Mbps。IEEE1394支持热插拔、数据传输实时性、采用总线结构、即插即用。1394接口分为4芯和6芯,4芯中有两对数据线,6芯除数据线外还包括一组电源线以对外接设备进行供电。IEEE1394接口,不需要控制器,可以实现对等传输,1394a最大传输距离为4.5米,1394b传输距离通常为10米,在降数据率情况下可延伸到100米(100Mbps),采用中继设备支持可进一步提高传输距离。
2.3 CameraLink接口
由AIA协会推出的数字图像信号通讯接口协议,是一种串行通讯协议。采用LVDS接口标准,具有速度快、抗干扰能力强、功耗低。从Channellink技术上发展而来的,在Channellink技术基础上增加了一些传输控制信号,并定义了一些相关传输标准。协议采用MDR-26针连接器或SDR-26针连接器,具有高速率,带宽可达6400Mbps、抗干扰能力强、功耗低的特点。
2.4 GigE千兆以太网接口
由AIA(AutomatdeImagingAssociation)创建并推广,是一种基于千兆以太网通信协议开发的相机接口标准。适用于工业成像应用,通过网络传输无压缩视频信号。是一个使用价格低廉线缆长距离传输图像的标准。
2.5 CoaXPress接口
CoaXPress是一种非对称的高速点对点串行通信数字接口标准,传输速度高达6.25Gbps,传输距离超过100m。数据传输量大,传输距离长,可选择传输距离和传输量:从50m@6.25Gbps到170m@1.25Gbps,价格低廉,易集成、支持热插拔。
2.6 Nbase-T接口
Nbase-T接口技术是有Nbase-T联盟引领的一种全新的网络技术,它通过定义一种新的以太网信号方式,使得现有已安装的双绞线能够在长达100m的范围内突破线缆1Gb/s的限制。Nbase-T可以让现有大量安装的超5类和6类线的传输速度达到2.5Gb/s或5Gb/s。
Nbase-T接口特点如下:它是GigE接口的升级版,在传输距离不变,器材不变的情况下,传输速度可以达到5Gb/s。
2.7 光纤接口
光纤接口是基于光纤通信的接口,其传输速度可达16.3Gb/s,单模光纤的连接距离可达10km,多模光纤的连接距离可达300m或者500m。一般情况下,光纤需要配备“特别”的采集卡,而且光纤线不能随意从中间连接,而需要专业设备才能连接,在连接处会比较脆弱,易出现故障。
光纤接口特点包括光纤通道传输速度快,传输距离远,但需要更新原有线缆设备。
03. Halcon图像采集过程
3.1 打开设备
相关算子
open_framegrabber 算子
程序示例
* Select a suitable image acquisition interface name AcqName
info_framegrabber(AcqName,'port',Information,Values)
* Open image acquisition device using the default settings, see
* documentation of the actually used interface for more details
open_framegrabber(AcqName,1,1,0,0,0,0,'default',-1,'default',-1.0, \\
'default','default','default',-1,-1,AcqHandle)
grab_image(Image,AcqHandle)
close_framegrabber(AcqHandle)
3.2 设置相机参数
相关算子
set_framegrabber_param
get_framegrabber_param
不同相机可以设置的参数有所不同。
3.3 获取图像
相关算子
从指定的图像采集设备启动异步采集
grab_image_start
从指定的图像采集设备异步采集一幅图像
grab_image_async
从指定的图像采集设备同步抓取图像
grab_image
异步采集示例
* Select a suitable image acquisition interface named AcqName.
open_framegrabber('AcqName', 1, 1, 0, 0, 0, 0, 'default', -1, 'default', \\
-1.0, 'default', 'default', 'default', -1, -1, AcqHandle)
* Start asynchronous grabbing.
grab_image_start(AcqHandle, -1)
* Run acquisition loop.
while (true)
* Get image, start next grab.
grab_image_async(Image, AcqHandle, -1.0)
* Next: Do something with the grabbed image.
endwhile
close_framegrabber(AcqHandle)
同步采集图像示例
* Select a suitable image acquisition interface name AcqName
info_framegrabber(AcqName,'port',Information,Values)
* Open image acquisition device using the default settings, see
* documentation of the actually used interface for more details
open_framegrabber(AcqName,1,1,0,0,0,0,'default',-1,'default',-1.0, \\
'default','default','default',-1,-1,AcqHandle)
grab_image(Image,AcqHandle)
close_framegrabber(AcqHandle)
3.4 结束采集图像
相关算子
关闭指定的图像采集设备
close_framegrabber
04. Halcon相机助手
通过Halcon相机助手采集图像,然后生成代码。
05. 文件读取
在不能通过硬件获取图像的时候,就需要将拍摄好的图像加载到程序中,HALCON提供了几种读取图像的方法。
5.1 通过读取图像助手读取图像
选择“文件”菜单中的“读取图像”的选项
选择图像,然后选择确定
生成代码如下:
read_image (Image, 'E:/苹果.jpg')
5.2 通过拖拽文件到主窗口
拖拽图片文件到Halcon主窗口,出现如下对话框
选择确定,自动插入如下代码
read_image (Image2, 'E:/苹果2.jpg')
5.3 通过图像采集助手读取图片
最后生成代码如下
* Image Acquisition 01: Code generated by Image Acquisition 01
list_files ('E:', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
for Index := 0 to |ImageFiles| - 1 by 1
read_image (Image, ImageFiles[Index])
* Image Acquisition 01: Do something
endfor
5.4 通过代码读取图像
通过代码的方式批量读取文件夹图像
* Image Acquisition 01: Code generated by Image Acquisition 01
* 文件路径
list_files ('E:/IMG', ['files','follow_links'], ImageFiles)
* 筛选图片格式
tuple_regexp_select (ImageFiles, ['\\\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
* 循环读取文件夹图像
for Index := 0 to |ImageFiles| - 1 by 1
read_image (Image, ImageFiles[Index])
* Image Acquisition 01: Do something
endfor
5.5 通过代码生成图像
示例代码如下
* 生成一张无灰度的图像
gen_image_const (Image, 'byte', 32, 32)
* 生成一种灰度渐变的图像
gen_image_gray_ramp (ImageGrayRamp, 1, 1, 128, 256, 256, 512, 512)
* 生成一张有灰度的图像
gen_image_proto (ImageGrayRamp, ImageCleared, 128)
* 设置图像某点灰度值
set_grayval (ImageCleared, 10, 10, 255)
06. 预留
07. 附录
7.1 机器视觉博客汇总
网址:https://dengjin.blog.csdn.net/article/details/116837497
以上是关于机器视觉 halcon中图像获取的主要内容,如果未能解决你的问题,请参考以下文章