图像处理是工控很有价值的一个领域,比如人脸识别,车牌识别,还有产品的位置识别,瑕疵检测,对于个人学习来说,我们无法直接上手几万块的成熟工业相机(高端的康耐视要6万左右,而且是黑白的,要测试一些带颜色的算法功能无法实现),先要用便宜的东西做一些简单的测试(原则上做教程不应该涉及硬件,因为如果读者无法按照你的硬件标准学习,那也只能走马观花看一遍,但是实际上要做工控必须要涉及硬件,可以先从简单的便宜的开始入手)
淘宝是比较靠谱的方案,我自己测试买的是下面这个品牌的(不是要给他们做广告,读者也可以自己淘宝找,基本上300万像素+开发的SDK肯定是够用了,如果你几百块也不愿意掏,笔记本自带的USB摄像头也是可以用的)
注意买相机也要买镜头(单相机是不能用的,买什么样的适配镜头可以问卖家,讲清楚你要做什么应用)
如果可能最好再加一个支架和光源(我个人的测试环境有支架,所以不需要,仅仅是测试使用光源也无所谓,我手动调节镜头的曝光就行了)
我刚开始玩这个的时候很穷,所以只能随便找了块板子打个孔,然后就开始测试了(没有人条件很充分的,几年以后我再回过头来把这一块东西理理顺,也只是为了培训带人)
对于具体型号的工业相机,一般需要安装相机提供的驱动,比如我这个就把相机连接到电脑的USB口,手动安装驱动
用微软自带的视频设备能够打开(假定就拍摄显示器的画面)
用它自带的调试软件测试能够正常使用(可以调整分辨率)
可以进行详细的参数设置(拍照,视频,曝光等)
运行软件提供的SDK测试(注意需要把对应的DLL放到C:/Windows/System32/目录下,如果是32位系统则复制SDK的那个DLL文件,如果是64为则复制SDK64的那个DLL文件)
运行C#的范例程序(点击Play可以显示实时的画面),如果不能运行修改目标平台为对应的系统版本(我是64位系统)
有了C#的范例,基本上我们能够把硬件采集图像的这一块内容搞定了,大量的比如调节曝光,图像翻转,设置分辨率等等功能我们都可以直接照抄范例代码的,注意这部分不管怎么弄目的都是获取我们期望的图像而已,一般越清晰越好(我们后面要介绍的是图像处理,所以本节并不是重点,事实上你从工业相机采集图像也是采集,从USB的摄像头也是,或者没有摄像头直接用图片也可以,你自己PS几个图片也能测试视觉系统的算法)
注意他这个范例代码有一块使用了指针直接覆盖采集到图像的数据(比如把某一块的像素填充为红色),不要觉得是相机坏掉了,它上面还有一部分注释掉的代码可以测试其他功能
除了C#的开发范例,他也提供了C++,QT等其他语言的实现范例和SDK的说明书(我们看一个产品做的是否到位,就只要看他给的资料全不全,因为目前用C#测试以后也可能换成别的语言,所以选择一款产品就要考虑到后期的平台移植,尽量用好一样东西,不要这也会那也玩过,结果一样都不精通。当然我还是那句话,我不是给这个商家在做广告,只是告诉读者一些工控的经验和教训,有时候并不能仅仅判断便宜一两百块钱就轻易下结论买哪家的,如果我们考虑工业使用,肯定不是是USB的,而是几千块的以太网通讯的相机,在那个价位的产品上挑一个好一点的)
最后介绍几个相机的常用概念:
Gama:伽玛值。可以认为是一种控制图像清晰度的一个参数,Gamma值越大,则取得的图像像素越精细,成像越逼真
Contrast:对比度,这个很好理解,以前看黑白电视机的时候经常用到,对比度调大一点,物体与周围的对比会更明显一点
Exposure:曝光度,感觉跟Gain用处差不多,可以认为是Gain的微调吧,我把Exposure从1040调到5000也没有关系,可见他是可以微调亮度的。Exposure在调小的时候就很敏感,太小了就直接乌黑一片,当然正常不会去乌黑一片的。
Gain:在相机里Gain表示高光度,Gain limit 是感光度的范围,数码相机的影像传感器是不可更换的,为了得到不同的感光度,它需要在信号的A/D转换时变换信号增益(Gain)。如果光线暗,就需要提高感光度即加大增益,这会降低信噪比,也就是增大了噪点。从下面三个不同的高光度可以发现,就像高光度越大,则越亮。Gain的用处就是在黑暗的时候要手动把高光度调大一点,成像才能清晰。
ROI:就是感兴趣窗口(Region of interest),比如一副2048*1536的图像非常大,处理起来很慢,我们设置感兴趣窗口只有200*200的这么一个小块,就可以每次只提取大图像的一小块做处理,可以显著的提升效率
更多教学视频和资料下载,欢迎关注以下信息:
我的优酷空间:
我的在线论坛:
问题交流:
QQ:910358960
邮箱: