halcon基本,vb连接halcon读取图像,视频
halcon学习方法:安装完halcon之后,在开始里出现一些文档
quick_guide.pdf
快速入门halcon
hdevelop_users_guide.pdf
详细讲解在hdevelop中使用halcon,及hdevelop的操作
programmers_guide.pdf
详细讲解在高级语言中的使用halcon
reference_hdevelop.pdf
讲解各个算子、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、vb中使用halcon窗口加载图像
1.读取图像
[cpp]view plaincopyprint?
1.read_image (Lena, 'F:/image/lena.jpg')
2.get_image_size (Lena, Width, Height)
3.dev_close_window ()
4.dev_open_window (0, 0, Width/2, Height/2, 'black', WindowHandle)
5.set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
6.dev_display (Lena)
7.disp_continue_message (WindowHandle, 'black', 'true')
8.stop ()
2.导出vb的bas代码
选择文件/导出,弹出
注意:此处选择使用halcon窗口
3.vb中调用read_image.bas
先看一下read_image.bas的内容,可知在需要的地方直接调用main即可
[vb]view plaincopyprint?
1....
2.
3.' Main procedure
4.Private Sub action()
5.
6. ' Local iconic variables
7. Dim ho_Lena As HUntypedObjectX
8.
9.
10. ' Local control variables
11. Dim hv_Width As Variant, hv_Height As Variant
12. Dim hv_WindowHandle As Variant
13.
14.
15. Call Op.ReadImage(ho_Lena, "F:/image/lena.jpg")
16. Call Op.GetImageSize(ho_Lena, hv_Width, hv_Height)
17. If COMExpWinHandleStack.IsOpen() Then
18. Op.CloseWindow (COMExpWinHandleStack.Pop())
19. End If
20. Call Op.SetWindowAttr("background_color", "black")
21. Call Op.OpenWindow(0, 0, Tuple.TupleDiv( _
22. hv_Width, 2), Tuple.TupleDiv(hv_Height, 2), 0, "", "", hv_WindowHandle)
23. COMExpWinHandleStack.Push (hv_WindowHandle)
24. Call set_display_font(hv_WindowHandle, 14, "mono", "true", "false")
25. If COMExpWinHandleStack.IsOpen() Then
26. Call Op.DispObj(ho_Lena, COMExpWinHandleStack.GetActive())
27. End If
28. Call disp_continue_message(hv_WindowHandle, "black", "true")
29. HDevelopStop
30.End Sub
31.
32.
33.
34.#If Not NO_EXPORT_APP_MAIN Then
35.Sub InitHalcon()
36. ' Default settings used in HDevelop
37. Call Op.SetSystem("do_low_error", "false")
38.End Sub
39.
40.Sub Main()
41. Call InitHalcon
42. Call action
43.End Sub
44.
45.#End If
3.1.新建一个exe 的project ,然后保存,然后添加read_image.bas 文件到此project
3.2.添加halcon/com 控件:选择project/components ,弹出的菜单中
3.3.在工具箱中会出现HWindowXCtrl 控件,拖进form1,然后再拖一个commandbutton,
双击
commanbutton,加入代码 [vb] view plaincopyprint? 3. End Sub Private Sub Command1_Click()
Call Main 3.4.按F5运行程序,然后单击command1,弹出 这是一个halcon 界面库构造的窗口,脱离vb 窗口的。 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 vb 中使用hwindowxctrl 的窗口加载图像 在上面第2步选择使用导出模板。 导出的代码如下,可知需要调用的过程是inithalcon 和runhalcon [vb] view plaincopyprint? 1. ... 2. ' Main procedure 3. Private Sub action() 4. 5. ' Local iconic variables 6. Dim ho_Lena As HUntypedObjectX 7. 8. 9. ' Local control variables 10. Dim hv_Width As Variant, hv_Height As Variant 11. Dim hv_WindowHandle As Variant 12. 13. Call Op.ReadImage(ho_Lena, "F:/image/lena.jpg") 14. Call Op.GetImageSize(ho_Lena, hv_Width, hv_Height)
15. 'dev_close_window(...); 16. 'dev_open_window(...); 17. Call set_display_font(hv_ExpDefaultWinHandle, 14, "mono", "true", "false") 18. Call Op.DispObj(ho_Lena, hv_ExpDefaultWinHandle) 19. Call disp_continue_message(hv_ExpDefaultWinHandle, "black", "true") 20. HDevelopStop 21. End Sub 22. 23. 24. 25. Sub InitHalcon() 26. ' Default settings used in HDevelop 27. Call Op.SetSystem("do_low_error", "false") 28. End Sub 29. 30. Sub RunHalcon(ByRef Window As HWindowX) 31. hv_ExpDefaultWinHandle = Window.HalconID 32. Call action 33.
End Sub
在上面的3.3中拖入一个commandbutton2,双击添加代码 [vb] view plaincopyprint? 1. Private Sub Form_Load() 2. Call InitHalcon
7. End Sub 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 vb 中使用hwindowxctrl 的窗口加载视频 1.插入摄像头,只要qq 视频模块可以使用的摄像头,halcon 基本都可以使用吧 2.在halcon 中新建一个工程,文件/新程序 3.选择助手/打开新的imageaquisition ,点击检测,会检测到directshow 观察连接标签栏里已经识别出中微星的摄像头,可以点击连接,实时查看一下。 颜色空间中可以选择以灰度方式采集图像。 4.选择生成代码标签,如下。同步采集。 选择插入代码,如下 [vb] view plaincopyprint? 1. * Code generated by Image Acquisition 01 2. open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'de fault', 'Vimicro USB PC Camera (ZC030x)', 0, -1, AcqHandle) 3. while (true) 4. grab_image (Image, AcqHandle) 5. * Do something 6. endwhile 7. close_framegrabber (AcqHandle)
其中
open_framegrabber用于打开摄像头并配置,此函数在调用时会测试要指定的设备,并锁定该设备。之后可以使用grab_image, grab_data, grab_image_async, or grab_data_async获取图像,然后处理。使用完之后需要用close_framegrabber释放,否则别的进程无法使用grab_image采集图像到Image
close_framegrabber 关闭设备
在grab_image (Image, AcqHandle)后面加一句dev_display(Image),把图像显示出来
5.导出vb代码
如下,
[vb]view plaincopyprint?
1....
2.' Main procedure
3.Private Sub action()
4.
5. ' Local iconic variables
6. Dim ho_Image As HUntypedObjectX
7.
8.
9. ' Local control variables
10. Dim hv_AcqHandle As Variant
11.
12. 'Code generated by Image Acquisition 01
13. Call Op.OpenFramegrabber("DirectShow", 1, 1, 0, 0, 0, 0, "default", 8, "rgb", -1, _
14. "false", "default", "Vimicro USB PC Camera (ZC030x)", 0, -1, hv_AcqHandle)
15. Do While 1
16. Call Op.GrabImage(ho_Image, hv_AcqHandle)
17. Call Op.DispObj(ho_Image, hv_ExpDefaultWinHandle)
18. 'Do something
19. #If USE_DO_EVENTS Then
20. ' Please note: The call of DoEvents() is only a hack to
21. ' enable VB to react on events. Please change the code
22. ' so that it can handle events in a standard way.
23. DoEvents
24. #End If
25. Loop
26. Call Op.CloseFramegrabber(hv_AcqHandle)
27.End Sub
28.
29.
30.
31.Sub InitHalcon()
32. ' Default settings used in HDevelop
33. Call Op.SetSystem("do_low_error", "false")
34.End Sub
35.
36.Sub RunHalcon(ByRef Window As HWindowX)
37. hv_ExpDefaultWinHandle = Window.HalconID
38. Call action
39.End Sub
vb中调用方式很简单仍然是inithalocn和runhalcon
把read_camera.bas加进vb,添加代码
[vb]view plaincopyprint?
1.Private Sub Form_Load()
2. Call InitHalcon
3.End Sub
4.
5.Private Sub Command3_Click()
6.Call RunHalcon(HWindowXCtrl.HalconWindow)
7.End Sub
Private Sub Form_Load()
Call InitHalcon
End Sub
Private Sub Command3_Click()
Call RunHalcon(HWindowXCtrl.Hal
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、需要注意的问题,
在hdevelop中的stop命令导入到vb.bas就变成HDevelopStop
HDevelopStop有两个版本实现,一个是空函数(使用halcon窗口导出时),一个是如下(使用导出模板时)
[vb]view plaincopyprint?
1.Public Sub HDevelopStop()
2. Call MsgBox("Press button to continue", vbYes, "Program stop", "", 1000)
3.End Sub
在采集视频时,程序退出之前需要close_framegrabber,否则会出错
halcon error#5322:image aquisition:timeout.
此时需要重插一下camera
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、halcon播放avi视频