
基于VB+Halcon开发的视觉检测源代码
老厂房的流水线还在转,传送带上的金属件咔嗒咔嗒响。老王叼着烟眯眼看屏幕,VB6的蓝色IDE窗
口里躺着几行泛黄的代码——这是十年前用Halcon攒的视觉检测程序,今天突然报了个图像采集异常。
"Halcon.CloseAllWindows() '这行祖传代码居然还能用"
老王嘟囔着按下F5,VB的调试模式带着特有的机械感启动。窗体上的HWindowControl控件抖了抖,
像老式电视机刚通电时的雪花屏。
图像采集部分的核心代码透着VB特有的直白:
```vbnet
Private Sub GrabImage()
Dim hv_AcqHandle As New HTuple
HOperatorSet.OpenFramegrabber("DirectShow", 0, 0, 0, 0, 0, 0, "default", -1, "rg
b", -1, "false", _
"default", "[0] USB Camera", 0, -1, hv_AcqHandle)
HOperatorSet.GrabImageAsync(hv_Image, hv_AcqHandle, -1)
End Sub
```
`OpenFramegrabber`的参数看得人眼晕,第三个参数"default"当年调试时改过三十多次。老王记
得清楚,产线换摄像头型号那次,这行代码的第七个参数从"ntsc"改成"pal"让他熬了整个通宵。
处理金属件边缘的代码段更有意思:
```vbnet
HOperatorSet.Threshold(hv_Image, outRegion, 120, 255)
HOperatorSet.Connection(outRegion, connectedRegions)
HOperatorSet.SelectShape(connectedRegions, selectedRegions, "area", "and", 500, 9999
9)
```
阈值处理接区域选择,典型的Halcon三板斧。VB里调用Halcon算子总带着点违和感,像是给拖拉机
装了个F1的方向盘。`SelectShape`的500这个阈值,老王当年用游标卡尺量了五十多个不良品才确定下来
。
最精髓的部分在结果判断:
```vbnet
If area > 0 Then