分享

机器视觉之halcon入门(6)-一文弄懂halcon连接相机

 乘舟泛海赏雨 2020-11-21

第三章 Halcon 简单例程讲解

第一节 连接相机

3.1.1 简单的啰嗦几句

上一章介绍的两个例子,都是基于现成的图片,进行处理然后转C#。但是工程中,不可能安排一个人一直给程序提供现成的图片。需要代码自己控制相机,从相机那里实时获取图片,实时图像处理。是不是这个理?所以每款相机都有一个SDK或者API,让你用你的语言去操控相机。但是估计你比较懒,(不是我估计的,是编写halcon的那群程序员。)所以他们弄了一个通用的,几乎可以操控市面上百分之好多的相机。(反正我还没遇到它不能的,所以我基本上就用的它。)有一种说法是用相机自带的SDK速度会快一点,有兴趣且偏执的朋友,可以have a try。

3.1.2 言归正传

这次我不先上代码了,因为有助手。咱们一步一步按照助手的来。首先你的相机得连上电脑哈。然后打开halcon。

机器视觉之halcon入门(6)-一文弄懂halcon连接相机

图3-1-2-1

单击上图中(3-1-2-1)'助手'中的红框框'打开新的Image Acquisition'项会弹出下图(3-1-2-2)中的窗口。按照图中步骤,先单击'自动检测接口'按钮,等他搜到你的相机后,后面的框中会显示相机接口的类型。此时说明你检测成功,找到你相机了。进入第二步,点击'连接'。

机器视觉之halcon入门(6)-一文弄懂halcon连接相机

图 3-1-2-2

机器视觉之halcon入门(6)-一文弄懂halcon连接相机

图 3-1-2-3

点击连接后,就会出现上图(3-1-2-3),设备栏显示的是你当前选择的相机型号,同时有好几个相机连接电脑的时候,可以在后面那个小箭头处进行选择;分辨率里面可以选择图片水平和垂直像素数量,这儿只能要么默认要么全部;颜色空间里面可以选择图片的颜色空间,你要是不是很懂啥叫颜色空间,没关系,里面可以选择是彩色图片(RGB)还是黑白图片(Gray)。当然刚开始你也可以全部都默认,整太多记不住。那就直接点击'连接'按钮。如果连接成功,'连接'二字会变成'断开',言下之意, 你再点一下就可以断开这个连接。这时候点击上方的'参数'按钮,连接成功后,它会由原来的灰色变成可点击的状态。点击进入参数设置页面,这里面你可以进行很多相机的参数设置。

机器视觉之halcon入门(6)-一文弄懂halcon连接相机

图 3-1-2-4

我简单介绍其中几个基础的参数,上图(3-1-2-4)第一个红框里面的,是图像的宽高设置,就是你相机采集图片的像素宽高(500万像素的相机是可以有拍200万像素照片的模式的,这个你知道吧?)第二个框是相机的帧率设置。一般相机参数上都会标明相机的最大帧率。但是根据你现场实际情况,你可以让你的相机不用那么累。(帧率就是你1秒钟拍几张照片的意思。。。)第三个框,是曝光时间。就是为了让光照射到相机感光材料的感光面上,快门所要打开的时间。所以时间越长,照片越亮。

滚动条往下拉,还会看到一个常用的参数GainRaw。它是相机的增益,原理好像是通过相机里面的放大信号对电路进行增强,使得感光芯片更加灵敏,在比较暗的条件下也可以拍得更清楚一些,更亮一些。(对于这几个参数的设置,详见本节TIPS 1)

现在我把长宽设置成1600,1200,帧率设置成10,曝光设置成1000us,然后点击上面的代码生成,进入代码生成的页面。如下图(3-1-2-5),再点击插入代码。

机器视觉之halcon入门(6)-一文弄懂halcon连接相机

图 3-1-2-5

在程序窗口就会看到自动生成的几行代码。如下图(3-1-2-6)。

机器视觉之halcon入门(6)-一文弄懂halcon连接相机

图 3-1-2-6

我们来简单分析下这几行代码。当然如果你英语实在太厉害,你也可以自己F1去看官方解释,那边的解释更详尽。

第一句:

open_framegrabber ():这里面好多参数。我至今不看帮助也不能全部回忆出来每个参数的意义。所以你应该也不用记,只要记住倒数第四个,是你的相机型号名称,最后一个是你相机的句柄就可以了。

Set_framegrabber_param(AcqHandle,'Width',1600):这一行的意思是设置相机的参数,比如照片的长宽啊,曝光时间啊,增益啊,颜色空间啊都是这个算子来设置。第一个参数是相机的句柄;第二个参数是要设置的参数名;第三个参数是设置的该参数的数值。那么这些参数名怎么才知道呢?有两种方法,一种是你利用图像采集助手,在'参数'页面,修改下那个参数,然后生成代码,就自动出来了,像上图中的我那样,还有一种就是自己在参数页面看,那个参数叫什么,然后输入。本例的第5行到第10行都是利用这个算子来设置参数。

参数设置完了,该控制相机拍照了。这儿系统给的代码是自动选择的异步获取(异步采集),什么叫异步获取呢?我的理解就是我相机按照你设置的参数先一直拍。拍完相机就保存一个地方,但是永远只保存最新的一张,然后你想用你就去取,但是拍照和取照这两个步骤不一定是同步的,比如你每秒钟拍10张,但是我需要照片的时候才会去取最新拍摄的一张,不一定每张照片的数据都转成图片格式传给我。而与之相对应的叫同步获取(同步采集),就是算子grab_image()每次采集直接转成图片。显然异步虽然比同步复杂点,但是更好用,有时候也会比同步的速度更快。异步就是图中的两个算子

grab_image_start(: : AcqHandle, MaxDelay : ):从指定的图像采集设备启动一个异步抓取。第一个参数就是这个设备的句柄,第二个参数是最大延迟时间,一般都填默认值-1。

grab_image_async( : : AcqHandle, MaxDelay :):从指定的图像采集设备获取图像的异步抓取。看到没,上一个算子是启动,一直去拍,下面一个算子是获取图像。其中第一个参数就是获取到的图像输出了,第二个参数是设备的句柄,第三个参数还是最大延迟时间,还是默认值-1。

通过grab_image_start(),让相机一直在拍摄,而且把每次最新的照片数据保存在句柄AcqHandle里面。第二个算子就是把句柄里面的数据转换成image输出。代码中用了一个无限的for循环,循环显示拍摄的图片。这就是传说中的摄像了吧。。。。好神奇

机器视觉之halcon入门(6)-一文弄懂halcon连接相机

,好吧,我无聊了。。。。

最后就是:

close_framegrabber (AcqHandle):Halcon还是非常有始有终的,你开过什么,最后就得关掉。虽然你直接关了整个halcon也是关。但是代码里面还是得有这一步。

有了这一招,你就学会了用halcon打开绝大多数的相机,并进行参数设置且可以实时获取图片了。是的,距离上纲上线你又近了一步!这样的话,在C#里面你就可以把这几个算子转成C#代码,作为一个打开相机的方法。把你需要的图像处理算子写成另一个方法,在for循环里面进行调用,就可以实现实时拍摄图片实时图像处理了!

言归正传,我们还是要复习下本节学到的算子:

1)open_framegrabber():

2)Set_framegrabber_param(AcqHandle,'Width',1600):

3)grab_image_start(: : AcqHandle, MaxDelay : ):

4)grab_image_async( : : AcqHandle, MaxDelay :):

5)close_framegrabber (AcqHandle):

本节TIPS:

根据正文的介绍,相机的曝光时间和增益都可以让相机更亮。另外还有两种方法,就是调节镜头的光圈和调节光源亮度。所以我们有4个方法来调整图片的亮度。大多数情况下,先调节镜头光圈和光源,然后是曝光时间,最后是增益。这个还真不是很好描述。这么说吧,相机贵于光源,所以要累,就先累光源。什么是光源地球人都知道了。什么是镜头光圈呢?它是控制镜头的进光量的,光线是先通过镜头再进入相机的嘛,所以把光圈调到最大,也是可以提高照片亮度的。什么是曝光时间呢?就是相机拍照时候打开芯片接收光线的时间,它直接影响到相机的进光量。

如果你拍摄的物体是在运动中的,曝光时间也会被物体的运动速度所限制,比如:运动物体的速度为1m/s。那1毫秒就移动一毫米。如果你的曝光时间设置为1000us,那么拍出来的图片就有1mm的拖影,还有你的像元尺寸所对应的实际物理尺寸也会有一定的影响,比如你1个像素表示的是0.5mm的大小,那就意味着拍出来的照片是有2个像素的拖影的。简单说就是这个道理了。最后是增益吧,因为增益高了,相当于放大了信号,那么图片中的噪点也会被放大,当然这不是你想要的。具体的还要看项目需求,这四个参数的协调有时候也是一门技术活,是需要积累经验的。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多