微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

初识halcon

一直都是使用opencv进行机器视觉方面的开发,但是opencv开发有很多不足的地方,都不是说opencv做得不好,但是opencv没有IDE,有时调参数时编译很多次才得到满意的结果,这点我觉得不是很好,我用过ni vision,里面有开发就简单一点,当然代码量其实差不多,但是前期的测试会节省大量时间。基于这个原因我找了halcon,其实知道这个软件已经有一些时间,不过一直没有使用,原因就是想训练一下自己的手写能力(这个原因比较无聊,其实是halcon价值不菲),不过项目实在进度比较紧张,只好用用halcon,反正我就是检测好参数,至于以后要不要用他生成的程序以后再说。

halcon支持多个平台,我就找最简单的windows的平台的开发工具,安装时选择不支持sse2的,只是P3和K8以前的cpu不支持sse2的指令集(本人电脑肯定支持),只是考虑一下用户的问题(因为不清楚是不是编译的过程有所不同,保险为上)。
网上关于halcon资料极少,少得可怜。只能靠自己看里面的例子和英文文档,进度颇慢。语法上支持C,C++,VB等,一般的流程是先用halcon做好了图像的处理部分,然后导出成其它语言的文件。再开其它开发工具进行开发,这部分其实和opencv没有什么区别。
语法方面,类似于VB的语法,赋值方面就好像pascle了。一般的处理流程是这样的:
dev_open_window(0,0,-1,-1,black,WindowID)
read_image(Die,'die3')
threshold(Die,Brightregion,128,255)
shape_trans(Brightregion,ROI,'rectangle2')
reduce_domain(Die,DieROI)
threshold(DieROI,RawSegmentation,50)
fill_up_shape(Rawsegmentation,Wires,'area',1,100)
opening_circle(Wires,BallRegion,15.5)
connection(BallRegion,Balls)
select_shape(Balls,FinalBalls,'circularity','and',0.85,1.0)
先加载一个图片到窗口,然后进行图像处理。时间到了,以后有机会再写。
Halcon标定流程
摄像机分两种,一种是面扫描摄像机(Area Scan Camera),一种是线扫描摄像机(Line Scan Camera)。准确来说,叫摄像机系统比较正确。两者的区别我也提一提吧,有些同学可能不知道,所谓的面扫描摄像系统是指可以通过单纯曝光取得面积影像,而线扫描摄像机,必须利用运动速度才能取得影像。
两种不同的摄像系统由于成像的过程有区别,所以标定的过程也有区别,这里仅讨论面扫描摄像系统。流程如下:
1、初始摄像机参数:
startCamPar:=[f,k,Sx,Sy,Cx,Cy,NumCol,NumRow]
f 焦距
k 初始为0.0
Sx 两个相邻像素点的水平距离
Sy 两个相邻像素点的垂直距离
Cx、Cy 图像中心点的位置
NumCol NumRow图像长和宽
2、caltab_points读取标定板描述文件里面描述的点到X[],Y[],z[],描述文件由gen_caltab生成
3、fin_caltab找到标定板的位置
4、find_marks_and_pose 输出标定点的位置和外参startpose
5、camera_calibration输出内参和所有外部参数
到第五步时,工作已经完成了一半,计算出各个参数后可以用map_image来还原形变的图像或者用坐标转换参数将坐标转换到世界坐标中。

本文出自 “jonsoft博客,请务必保留此出处http://www.jb51.cc/article/p-xuqeppzp-bed.html

原文地址:https://www.jb51.cc/vb/262073.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐