基于HALCON和VC_混合编程的视觉测量系统设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2011 年 11 月 第 26 卷 第 6 期
咸阳师范学院学报 Journal of Xianyang Normal University
[理论物理学与应用物理学研究]
Nov.2011 Vol.26 No.6
基于 HALCON 和 VC++混合编程的视觉测量系统设计
吉 军 1,严立甫 2,张 辉 1,李艳红 1
(1. 咸阳师范学院 物理与电子工程学院,陕西 咸阳 712000;
2. 兰州理工大学 计算机与通信学院,甘肃 兰州 730050)
摘 要:视觉测量是采用机器视觉精确测量和定位空间几何尺寸的技术,能够有效提高工业
检测的精度和效率。运用基于 HALCON 和 VC++混合编程方法开发了电子元件视觉测量软件工
2 HALCON 和 VC++混合编程方法
2.1 HALCON 和 VC++混合编程的设计流程 HALCON 和 VC++混合编程是将 VC++作为整
个视觉测量系统应用程序开发环境,通过函数调用 方式使用 HALCON 的图像处理库函数实现视觉测 量系统核心处理功能,从而开发完成视觉测量软件 工具。该方法的程序设计流程如图 1 所示。
HALCON 还提供了开放的结构形式,利用自有 的 HDevelop 编 程 工 具 ,可 以 轻 松 地 实 现 代 码 从 HALCON 算子到 C、C+ + 、C# 等程序语言的转化, 为测量软件的开发提供了良好的编程环境。HALCON/C++是 HALCON 图像处理系统和 C++编程语 言的接口。使用 HALCON 的函数库,能够在 C++中 很方便的完成 HALCON 中所实现的功能。
HALCON/C++接口提供了两种不同的方式在 C++中调用 HALCON 库函数:子程序调用法和面向
·22·
咸阳师范学院学报
第 26 卷
对象调用法[9]。 子程序调用法就是在 VC++或者 HDevelop 环境
下直接调用 HALCON 算子。示例代码如下: Hobject original_image, smoothed_image; read_image(&original_image,“monkey”); mean_image(original_image, &smoothed_image,
由图 1 可知,以 HALCON 为核心编写视觉测量 系统应用程序的步骤如下:
Step 1 利用 HDevelop 环境检查分析图像,建立 视觉测量计算模型,开发视觉测量的核心算法代码, 并进行程序功能验证;
Step 2 由 HDevelop 导出视觉测量程序代码,生 成 C 代码或者 C++代码透过指令加入程序中;
Abstract: Vision Measurement is a technique using machine vision for accurate measuring and locating space geometrical dimensions. The technique is able to effectively improve the accuracy and efficiency of industrial measurement. Applying the HALCON and VC++ mixed programming method, the electronic components vision measurement software tool is developed. And a set of core algorithms and their function are realized, such as measurement image capture and display, vision measurement. We also design and construct the hardware platform, which is comprised of industrial digital camera, industrial lens, illuminant and other instrument. Based on the platform, a series of experiments are done to verify the reliability and stability of the tool. The results indicate that the system test is fast and the test accuracy reaches the expecting qualification.
Step 1 在 project→settings 的 Link 属性页中添加 halconcpp.lib;
Step 2 在 project→settings 的 C/C++属性页 Preprocessor 中 添 加 目 录 $(HALCONROOT)\include, $(HALCONROOT)\include\cpp;
Step 3 在 project→settings 的 Link 属 性 页 input 下 拉 菜 单 中 添 加 路 径 $(HALCONROOT)\lib\i586-nt4 或者是$[HALCONROO T]/lib/ $[HALCONARCH]。 2.3 混合编程 HALCON 库函数的调用方法
1 视觉测量系统与 HALCON 软件
1.1 视觉测量系统及其构成 视觉测量是机器视觉在工业检测领域的重要应
用。视觉测量用机器代替人眼来完成观测和判断, 常用于大批量生产过程中的产品质量检测,可以大 大提高检测精度和速度,从而提高生产效率,并且可 以避免人眼视觉检测所带来的偏差和误差。视觉测
收稿日期:2011-10-16 基金项目:陕西省教育厅科研基金项目(09JK799,2010JK892);咸阳师范学院科研基金项目(07SYK274)。 作者简介:吉 军(1982-),男,陕西旬阳县人,咸阳师范学院物理与电子工程学院讲师,西北工业大学现代设计与集成制 造技术教育部重点实验室博士研究生,研究方向为计算机集成制造技术、CAD/CAE/CAM。
Step 4 在 VC++环境中通过程序语言的功能来 建构程序界面,开发整个视觉测量程序,并完成程序 功能验证;
Step 5 编译、链接,生成应用程序,并将自行开发 的程序和HALCON library一起装入视觉测量系统。 2.2 混合编程的环境配置
要在 V C++中开发图像处理应用程序,并且调 用 HALCON 的库函数,首要工作是在 V C++中配置 相应的交互编程环境,主要包括头文件路径和链接 文件及路径的设置,具体步骤如下:
具,实现了测量图像采集与显示、视觉测量等核心算法及其功能;设计并构建了由工业数字摄像
机、工业镜头、光源等仪器组成的电子元件视觉测量硬件平台,并依此对软件工具的可靠性和稳定
性进行试验验证,结果表明系统检测速度快、检测精度达到预期技术指标。
关键词:HALCON;VC++;混合编程;视觉测量系统
中图分类号:TP391.7
Key words: HALCON, VC++; mixed programming; vision inspection system
机器视觉是通过光学装置和非接触传感器自动 地接收和处理一个真实物体的图像,以获得所需信 息或用于控制机器人运动的装置,已广泛应用于在 产品质量检测[1-2]、工厂自动化[3-4]、机器人[5-6]等领域。
镜头、环形光源、光源控制器等;测量图像处理和测 量结果判定部分主要是基于 HALCON 和 VC++混合 编程开发而成的软件工具,包括图像采集、图像显 示、相机标定、元件测量与结果显示等模块。系统构 成如图 2 所示。
工业 摄像机
镜头 环形光源
元件
视觉测量计算机
测量图像采集与显示
视
觉
工业相机标定
测
量
Step 3 配置 HALCON 和 VC++混合编程的程序 开发环境;
混合编程环境配置
Start
HDevelop 环境下开发 视觉测算法 否
程序功能验证 是
HDevelop 输出程序 C++代码
VC++环境下封装 C++代码
修改、调试 C++代码
否 程序功能验证
百度文库是 编译、链接,产生应用程序
End
图 1 HALCON 和 VC++混合编程的设计流程
第6期
吉 军,等:基于 HALCON 和 VC++混合编程的视觉测量系统设计
· 21 ·
量系统通过图像摄取装置将被摄取目标转换成图像 信号,传送给专用图像处理系统进行各种运算来抽 取目标特征,进而根据判别的结果来控制现场的设 备动作[7]。
视觉测量系统通常由硬件和软件两部分组成, 硬件主要包括工业数字摄像机、工业镜头、光源、工 业 PC 机、图像采集卡、监视器和通讯/输入输出单元 等;软件则是根据具体的测量内容和精度要求由设 计人员自行开发。 1.2 HALCON 及 HALCON/C++
HALCON 是一款由德国著名的机器视觉软件开 发公司 MVTec Software GmbH 研发的一款全功能机 器视觉软件包,提供了原型化的集成开发环境 HDevelop,用户可以灵活地搭建自己的机器视觉系统。 HALCON 是世界上最全面的机器视觉处理软件,为 低、中、高阶图像处理提供超过 1 480 个算子和 900 多 个例程,可以应用到视觉测量的整个过程,如图像采 集与显示、图像分割、特征提取、模板创建以及图像匹 配等。作为目前业内功能最完善、效率最高的软件之 一,已被广泛应用于视觉检测、机器人导航等领域[8]。
为了提高电子元件尺寸测量的精度和效率,借 鉴机器视觉的技术方法,本文提出并设计了电子元 件视觉测量系统,在研究了 HALCON 和 VC++混合 编程方法之后,采用该方法编程实现了视觉测量系 统的相关核心算法,开发完成的软件工具实现了视
觉测量功能,在构建完成的试验硬件平台上,通过试 验实现系统的可靠性和稳定性验证。
3.1 系统组成结构 电子元件视觉测量系统主要采用工业摄像机采
集电子元件图像,通过 HALCON 和 VC++混合编程 开发的专用测量软件系统对图像进行处理,得出测 量数据结果后,进行产品质量判断。系统主要由图 像采集、测量图像处理和测量结果判定与显示三部 分组成。其中图像采集部分包括工业摄像机、工业
系 统
测量图像处理
软
件 工
码,除了不同的算子名称外,算子调用参数的数量和 类型也有所不同。
通常倾向于使用面向对象的方式来调用,但是 需要注意的是,使用 HDevelop 导出的 C++代码都是 通过子程序方式来调用的,如果要使用面向对象方 式必须手动更改代码,而且,现有的部分 HALCON 库函数只对子程序调用方式有效。
3 基于 HALCON 和 VC++混合编程的电子元 件视觉测量系统设计
文献标识码: A
文章编号:1672-2914(2011)06-0020-05
Vision Measurement System Design Based on HALCON and VC++ Mixed Programming
JI Jun1,YAN Li-fu2,ZHANG Hui1,LI Yan-hong1
(1. College of Physics and Electronics, Xianyang Normal University, Xianyang 712000, Shaanxi,China; 2. School of Computer and Communication, Lanzhou University of Technology, Lanzhou 730050, Gansu, China)
11, 11)。 面向对象调用法就是通过一系列的类来调用
HALCON 算子。上述示例代码可以转化为: HImageoriginal_image(“monkey)”,smoothed
_image; amoothed image=original image.MeanImage(11,
11)。 两种不同的调用方式产生出截然不同的程序代
咸阳师范学院学报 Journal of Xianyang Normal University
[理论物理学与应用物理学研究]
Nov.2011 Vol.26 No.6
基于 HALCON 和 VC++混合编程的视觉测量系统设计
吉 军 1,严立甫 2,张 辉 1,李艳红 1
(1. 咸阳师范学院 物理与电子工程学院,陕西 咸阳 712000;
2. 兰州理工大学 计算机与通信学院,甘肃 兰州 730050)
摘 要:视觉测量是采用机器视觉精确测量和定位空间几何尺寸的技术,能够有效提高工业
检测的精度和效率。运用基于 HALCON 和 VC++混合编程方法开发了电子元件视觉测量软件工
2 HALCON 和 VC++混合编程方法
2.1 HALCON 和 VC++混合编程的设计流程 HALCON 和 VC++混合编程是将 VC++作为整
个视觉测量系统应用程序开发环境,通过函数调用 方式使用 HALCON 的图像处理库函数实现视觉测 量系统核心处理功能,从而开发完成视觉测量软件 工具。该方法的程序设计流程如图 1 所示。
HALCON 还提供了开放的结构形式,利用自有 的 HDevelop 编 程 工 具 ,可 以 轻 松 地 实 现 代 码 从 HALCON 算子到 C、C+ + 、C# 等程序语言的转化, 为测量软件的开发提供了良好的编程环境。HALCON/C++是 HALCON 图像处理系统和 C++编程语 言的接口。使用 HALCON 的函数库,能够在 C++中 很方便的完成 HALCON 中所实现的功能。
HALCON/C++接口提供了两种不同的方式在 C++中调用 HALCON 库函数:子程序调用法和面向
·22·
咸阳师范学院学报
第 26 卷
对象调用法[9]。 子程序调用法就是在 VC++或者 HDevelop 环境
下直接调用 HALCON 算子。示例代码如下: Hobject original_image, smoothed_image; read_image(&original_image,“monkey”); mean_image(original_image, &smoothed_image,
由图 1 可知,以 HALCON 为核心编写视觉测量 系统应用程序的步骤如下:
Step 1 利用 HDevelop 环境检查分析图像,建立 视觉测量计算模型,开发视觉测量的核心算法代码, 并进行程序功能验证;
Step 2 由 HDevelop 导出视觉测量程序代码,生 成 C 代码或者 C++代码透过指令加入程序中;
Abstract: Vision Measurement is a technique using machine vision for accurate measuring and locating space geometrical dimensions. The technique is able to effectively improve the accuracy and efficiency of industrial measurement. Applying the HALCON and VC++ mixed programming method, the electronic components vision measurement software tool is developed. And a set of core algorithms and their function are realized, such as measurement image capture and display, vision measurement. We also design and construct the hardware platform, which is comprised of industrial digital camera, industrial lens, illuminant and other instrument. Based on the platform, a series of experiments are done to verify the reliability and stability of the tool. The results indicate that the system test is fast and the test accuracy reaches the expecting qualification.
Step 1 在 project→settings 的 Link 属性页中添加 halconcpp.lib;
Step 2 在 project→settings 的 C/C++属性页 Preprocessor 中 添 加 目 录 $(HALCONROOT)\include, $(HALCONROOT)\include\cpp;
Step 3 在 project→settings 的 Link 属 性 页 input 下 拉 菜 单 中 添 加 路 径 $(HALCONROOT)\lib\i586-nt4 或者是$[HALCONROO T]/lib/ $[HALCONARCH]。 2.3 混合编程 HALCON 库函数的调用方法
1 视觉测量系统与 HALCON 软件
1.1 视觉测量系统及其构成 视觉测量是机器视觉在工业检测领域的重要应
用。视觉测量用机器代替人眼来完成观测和判断, 常用于大批量生产过程中的产品质量检测,可以大 大提高检测精度和速度,从而提高生产效率,并且可 以避免人眼视觉检测所带来的偏差和误差。视觉测
收稿日期:2011-10-16 基金项目:陕西省教育厅科研基金项目(09JK799,2010JK892);咸阳师范学院科研基金项目(07SYK274)。 作者简介:吉 军(1982-),男,陕西旬阳县人,咸阳师范学院物理与电子工程学院讲师,西北工业大学现代设计与集成制 造技术教育部重点实验室博士研究生,研究方向为计算机集成制造技术、CAD/CAE/CAM。
Step 4 在 VC++环境中通过程序语言的功能来 建构程序界面,开发整个视觉测量程序,并完成程序 功能验证;
Step 5 编译、链接,生成应用程序,并将自行开发 的程序和HALCON library一起装入视觉测量系统。 2.2 混合编程的环境配置
要在 V C++中开发图像处理应用程序,并且调 用 HALCON 的库函数,首要工作是在 V C++中配置 相应的交互编程环境,主要包括头文件路径和链接 文件及路径的设置,具体步骤如下:
具,实现了测量图像采集与显示、视觉测量等核心算法及其功能;设计并构建了由工业数字摄像
机、工业镜头、光源等仪器组成的电子元件视觉测量硬件平台,并依此对软件工具的可靠性和稳定
性进行试验验证,结果表明系统检测速度快、检测精度达到预期技术指标。
关键词:HALCON;VC++;混合编程;视觉测量系统
中图分类号:TP391.7
Key words: HALCON, VC++; mixed programming; vision inspection system
机器视觉是通过光学装置和非接触传感器自动 地接收和处理一个真实物体的图像,以获得所需信 息或用于控制机器人运动的装置,已广泛应用于在 产品质量检测[1-2]、工厂自动化[3-4]、机器人[5-6]等领域。
镜头、环形光源、光源控制器等;测量图像处理和测 量结果判定部分主要是基于 HALCON 和 VC++混合 编程开发而成的软件工具,包括图像采集、图像显 示、相机标定、元件测量与结果显示等模块。系统构 成如图 2 所示。
工业 摄像机
镜头 环形光源
元件
视觉测量计算机
测量图像采集与显示
视
觉
工业相机标定
测
量
Step 3 配置 HALCON 和 VC++混合编程的程序 开发环境;
混合编程环境配置
Start
HDevelop 环境下开发 视觉测算法 否
程序功能验证 是
HDevelop 输出程序 C++代码
VC++环境下封装 C++代码
修改、调试 C++代码
否 程序功能验证
百度文库是 编译、链接,产生应用程序
End
图 1 HALCON 和 VC++混合编程的设计流程
第6期
吉 军,等:基于 HALCON 和 VC++混合编程的视觉测量系统设计
· 21 ·
量系统通过图像摄取装置将被摄取目标转换成图像 信号,传送给专用图像处理系统进行各种运算来抽 取目标特征,进而根据判别的结果来控制现场的设 备动作[7]。
视觉测量系统通常由硬件和软件两部分组成, 硬件主要包括工业数字摄像机、工业镜头、光源、工 业 PC 机、图像采集卡、监视器和通讯/输入输出单元 等;软件则是根据具体的测量内容和精度要求由设 计人员自行开发。 1.2 HALCON 及 HALCON/C++
HALCON 是一款由德国著名的机器视觉软件开 发公司 MVTec Software GmbH 研发的一款全功能机 器视觉软件包,提供了原型化的集成开发环境 HDevelop,用户可以灵活地搭建自己的机器视觉系统。 HALCON 是世界上最全面的机器视觉处理软件,为 低、中、高阶图像处理提供超过 1 480 个算子和 900 多 个例程,可以应用到视觉测量的整个过程,如图像采 集与显示、图像分割、特征提取、模板创建以及图像匹 配等。作为目前业内功能最完善、效率最高的软件之 一,已被广泛应用于视觉检测、机器人导航等领域[8]。
为了提高电子元件尺寸测量的精度和效率,借 鉴机器视觉的技术方法,本文提出并设计了电子元 件视觉测量系统,在研究了 HALCON 和 VC++混合 编程方法之后,采用该方法编程实现了视觉测量系 统的相关核心算法,开发完成的软件工具实现了视
觉测量功能,在构建完成的试验硬件平台上,通过试 验实现系统的可靠性和稳定性验证。
3.1 系统组成结构 电子元件视觉测量系统主要采用工业摄像机采
集电子元件图像,通过 HALCON 和 VC++混合编程 开发的专用测量软件系统对图像进行处理,得出测 量数据结果后,进行产品质量判断。系统主要由图 像采集、测量图像处理和测量结果判定与显示三部 分组成。其中图像采集部分包括工业摄像机、工业
系 统
测量图像处理
软
件 工
码,除了不同的算子名称外,算子调用参数的数量和 类型也有所不同。
通常倾向于使用面向对象的方式来调用,但是 需要注意的是,使用 HDevelop 导出的 C++代码都是 通过子程序方式来调用的,如果要使用面向对象方 式必须手动更改代码,而且,现有的部分 HALCON 库函数只对子程序调用方式有效。
3 基于 HALCON 和 VC++混合编程的电子元 件视觉测量系统设计
文献标识码: A
文章编号:1672-2914(2011)06-0020-05
Vision Measurement System Design Based on HALCON and VC++ Mixed Programming
JI Jun1,YAN Li-fu2,ZHANG Hui1,LI Yan-hong1
(1. College of Physics and Electronics, Xianyang Normal University, Xianyang 712000, Shaanxi,China; 2. School of Computer and Communication, Lanzhou University of Technology, Lanzhou 730050, Gansu, China)
11, 11)。 面向对象调用法就是通过一系列的类来调用
HALCON 算子。上述示例代码可以转化为: HImageoriginal_image(“monkey)”,smoothed
_image; amoothed image=original image.MeanImage(11,
11)。 两种不同的调用方式产生出截然不同的程序代