初识halcon

2019-07-12 23:21发布

一直都是使用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,ROI,DieROI)
threshold(DieROI,RawSegmentation,0,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://juwen.blog.51cto.com/135311/88531