VB环境下HALCON图像处理的应用

[复制链接]
查看3934 | 回复3 | 2010-4-2 23:30:00 | 显示全部楼层 |阅读模式
德国HALCON是一款具有交互式编程开发的图像处理软件,可导出VB,C/C++,C#等代码。 由于使用HALCON图像处理软件要有一定条件(如需外部图像传感器,工件运动控制机构),制约 了更多的软件开发者参与,因而其应用资料甚少(包括网络)。 笔者在开发LED视觉自动焊线机时,使用VB6.0作为开发平台,利用HALCON强大图像处理能力, 完成了,图像学习,图像识别,图像跟踪,工件精密位移等功能。 下面是开发过程中的部分小程序: 1,首先安装HALCON图像处理软件(笔者使用的是HALCON 8.0版本); 2,打开VB6.0开发程序,在新建工程列表中选择“标准 EXE”并确认; 3,在工程(P)选择部件(O),在部件列表中选择“Halcon/COM library V1.6”,再按应用; 4,在Form左边工具箱选择带有小鸟icon的控件,其名为“HWindowXCtrl”,将此控件放置 于Form视窗界面上,其名称为“HWindowXCtrl1”; 5,点击控件HWindowXCtrl1,设置Height=8640,Width=11520,这时查看HWindowXCtrl1属性,HHeightPixels=576,HWidthPixels=768;当然HWindowXCtrl1也是黑色的。 程序例子 一,加载图片 1,声明: Dim Window As HWindowX Dim ImageIc As New HImageX 2,在Form下写入下面语句: Set Window = HWindowXCtrl1.HalconWindow 3,放置一按钮,设置Command1.Caption为"加载图片",并写入以下语句: Call ImageIc.ReadImage("Image1.bmp") Call Window.DispImage(ImageIc) '现示图片 4,将所加载的Image1.bmp图片放入其开发程序文件中,按"加载图片"按钮就可运行程序了! 二,画坐标线 1,再放置一按钮,设置Command2.Caption为"画坐标线",并写入以下语句: Call Window.SetColor("red") '坐标线颜色 Call Window.DispCross(288, 384, 800, 0) '画坐标线 2,按"画坐标线"按钮就可运行程序了! 三,画任意矩形框 1,加入声明 Dim Row As Double, Col As Double, Phi As Double, Len1 As Double, Len2 As Double 2,再放置一按钮,设置Command2.Caption为"画任意框",并写入以下语句: Call Window.SetDraw("margin") '画线声明 Call Window.SetLineWidth(1) '画线线号 Call Window.SetColor("red") '画线颜色 Row = Window.DrawRectangle2(Col, Phi, Len1, Len2) 3,按"画任意框"按钮就可运行程序了! 四,放置文字 1,再放置一按钮,设置Command3.Caption为"放置文字",并写入以下语句: Call Window.SetColor("green") '文字颜色 Call Window.SetFont("宋体") '设置文字字体 Call Window.SetTposition(10, 520) '设置显示位置 Call Window.WriteString("VB环境下HALCON图像处理的应用") '显示文字 2,按"放置文字"按钮就可运行程序了! 如果要显示其它数据,增加一标签控件Label,将 Call Window.WriteString("VB环境下HALCON图像处理的应用"改为Call Window.WriteString(Label1.Caption) 例:显示时间, Private Sub Timer1_Timer() Label.Caption=Time Call Window.SetColor("green") '文字颜色 Call Window.SetFont("宋体") '设置文字字体 Call Window.SetTposition(10, 520) '设置显示位置 Call Window.WriteString(Label1.Caption) '显示文字 END Sub 在坐标上增加刻度:加上列语句就行了 Call Window.SetColor("green") '画线颜色 Call Window.DispCross(288, 414, 10, 0) '画坐标线 Call Window.DispCross(288, 444, 10, 0) '画坐标线 Call Window.DispCross(288, 474, 10, 0) '画坐标线 Call Window.DispCross(288, 504, 10, 0) '画坐标线 Call Window.DispCross(288, 354, 10, 0) '画坐标线 Call Window.DispCross(288, 324, 10, 0) '画坐标线 Call Window.DispCross(288, 294, 10, 0) '画坐标线 Call Window.DispCross(288, 264, 10, 0) '画坐标线 在实际使用中,画框线是多样,但常用的有矩形框,任意矩形框,画圆和任意线框.我们就先来画框吧. 放置4个Option控件,设置Style 为1,标志(Index)分别是0,1,2,3 4个Option控件可以标文字或图案(Icon). Dim frame As Integer '画框线变量声明 Private Sub Option1_Click(Index As Integer) '画线 Select Case Index Case 0 '当0按钮按下时画矩形框 frame = Index Case 1 '按钮1按下时画任意矩形框 frame = Index Case 2 '按钮2按下时画圆 frame = Index Case 3 '按钮3按下时画任意线 frame = Index End Select End Sub 在程序使用时,有时需要文件夹来放程序使用时产生的记录,下面这段代码就可自动生成一个文件夹. Dim sa As SECURITY_ATTRIBUTES Private Declare Function CreateDirectory Lib "kernel32" Alias "CreateDirectoryA" (ByVal lpPathName As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long Private Type SECURITY_ATTRIBUTES nLength As Long bInheritHandle As Long End Type Private Sub Form_Load() Call CreateDirectory(("重要资料"), sa) End Sub
ouyang5460 | 2010-6-19 14:26:00 | 显示全部楼层
楼主辛苦了
光年1988 | 2011-2-25 23:57:00 | 显示全部楼层
非常感谢!!!楼主能贴出一个HALCON和VB.NET结合的实例吗?
qmqqmq | 2016-5-29 13:32:15 | 显示全部楼层
多谢楼主分享。。。。
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则