VB.NET与halcon联合编程实现实时显示和采集

实现功能:1点击“连接相机”按钮后,在实时显示窗口显示相机的实时图像;2点击“采集”按钮会显示将当前图像采集显示在采集显示窗口;3点击“关闭相机”按钮后断开相机连接,停止实时显示功能。

原理:新开线程,利用委托实现实时显示和采集显示功能。

代码:

Imports HalconDotNet
Imports System.Threading
Public Class Form1
Dim rtdthread As Thread '新建实时显示线程realtimedisplay:rtdthread

'定义委托类型
Delegate Sub voidshow(ByRef ho_image As HObject)
Delegate Sub showprocesstime(ByVal hv_s As HTuple)

Public hv_ExpDefaultWinHandle As HTuple '实时显示窗口
Public hv_ExpDefaultWinHandle1 As HTuple '采集显示窗口
'信号标志
Public Camopening As Boolean '相机打开
Public B As Boolean '线程信号
Public C_s As Boolean '采集按钮信号
Public YB As Boolean '样本添加标记
'图像ho_image 为实时显示图像,ho_image1为采集显示图像
Dim ho_Image As HObject = Nothing, ho_Image1 As HObject = Nothing
'相机name的指针
Dim hv_AcqHandle As HTuple = Nothing

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'初始化
Camopening = False '相机连接标志
HOperatorSet.GenEmptyObj(ho_Image)
HOperatorSet.GenEmptyObj(ho_Image1)
'定义窗口
hv_ExpDefaultWinHandle = HWindowControl1.HalconWindow
hv_ExpDefaultWinHandle1 = HWindowControl2.HalconWindow

End Sub
'连接相机
Private Sub OpenCamBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OpenCamBtn.Click
Try
Try
HOperatorSet.CloseAllFramegrabbers() '关闭所有相机
HOperatorSet.OpenFramegrabber(New HTuple("1394IIDC"), New HTuple(1), New HTuple(1), _
New HTuple(0), New HTuple(0), New HTuple(0), New HTuple(0), New HTuple("progressive"), _
New HTuple(8), New HTuple("default"), New HTuple(-1), New HTuple("false"), _
New HTuple("default"), New HTuple("000A4701120A8F4D"), New HTuple(0), New HTuple(-1), _
hv_AcqHandle) '打开相机
Camopening = True '相机连接标志

HOperatorSet.SetFramegrabberParam(hv_AcqHandle, New HTuple("camera_type"), New HTuple("7:0:0")) '设置相机参数

Catch ex As Exception

End Try
rtdthread = New Thread(AddressOf showimage)
rtdthread.Name = "myshowimage"
rtdthread.Start() '线程开始

Catch ex As Exception

End Try


End Sub
'rtd线程
Private Sub showimage()
B = True
'Dim hv_Seconds1 As HTuple = Nothing, hv_Seconds0 As HTuple = Nothing
'Dim hv_s As HTuple = Nothing
Dim SI As New voidshow(AddressOf tureshowimage)

While B
'HOperatorSet.CountSeconds(hv_Seconds0)
ho_Image.Dispose()
HOperatorSet.GrabImageAsync(ho_Image, hv_AcqHandle, New HTuple(-1))
HOperatorSet.WaitSeconds(New HTuple(0.08)) '延时
HOperatorSet.DispObj(ho_Image, hv_ExpDefaultWinHandle)
'委托输出ho_image
Me.Invoke(SI, ho_Image)

'HOperatorSet.CountSeconds(hv_Seconds1)
'hv_s = hv_Seconds1.TupleSub(hv_Seconds0)
'Me.Invoke(New showprocesstime(AddressOf st), hv_s)
End While

End Sub
Private Sub st(ByVal hv_s As HTuple)
Dim a As Integer
a = hv_s.D
TextBox2.Text = a.ToString

End Sub
'定义委托
Private Sub tureshowimage(ByRef ho_image As HObject)
If C_s = True Then

ho_Image1.Dispose()
HOperatorSet.CopyImage(ho_image, ho_Image1)
HOperatorSet.ClearWindow(hv_ExpDefaultWinHandle1)

HOperatorSet.DispObj(ho_Image1, hv_ExpDefaultWinHandle1)
C_s = False
End If
HOperatorSet.ClearWindow(hv_ExpDefaultWinHandle)
HOperatorSet.DispObj(ho_image, hv_ExpDefaultWinHandle)

End Sub
Private Sub Form1_closing(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.FormClosing

rtdthread.Abort() '关闭rtd线程
HOperatorSet.CloseFramegrabber(hv_AcqHandle) '关闭相机
ho_Image.Dispose()
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim n As Integer = 0
Do
n = n + 1
TextBox2.Text = n
If (n = 30) Then
HOperatorSet.GenEmptyObj(ho_Image)
ho_Image.Dispose()
ElseIf (n > 60) Then
Exit Do
End If

Loop While ho_Image1 Is Nothing
End Sub
'检测
Private Sub DetectionBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DetectionBtn.Click
If Camopening = True Then

C_s = True '采集按钮按下的信号
HOperatorSet.WaitSeconds(New HTuple(0.1)) '延时
Else
MsgBox("相机未连接!(识别)")
End If
End Sub

Private Sub CloseCamBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloseCamBtn.Click
Try
If Camopening = True Then
'关闭线程
B = False
rtdthread.Abort()
'关闭相机
Try
HOperatorSet.ClearWindow(hv_ExpDefaultWinHandle)
HOperatorSet.CloseFramegrabber(hv_AcqHandle)

Catch HDevExpDefaultException1 As HalconException

End Try
ho_Image.Dispose()
ho_Image1.Dispose()
Camopening = False
Else

MsgBox("相机未连接!(关闭)")
End If
Catch ex As Exception

End Try
End Sub
End Class

 

 

 

转载于:https://www.cnblogs.com/liweisheng/p/5016175.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值