vb连接halcon读取图像

vb连接halcon读取图像
vb连接halcon读取图像

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视频

相关主题
相关文档
最新文档