halcon联合c#采集显示(打开/关闭相机)
第一部分 halcon篇(hdevelop 17.12)
一、使用halcon的open_framegrabber算子打开相机
1.打开相机:open_framegrabber ('GigEVision2', 0, 0, 0, 0, 0, 0, 'progressive', -1, 'default', -1, 'false', 'default', '002149019150_DahengImaging_MER50014GM', 0, -1, AcqHandle)
参数:
2.异步采集:grab_image_start (AcqHandle, -1)
参数:
AcqHandle (input_control) framegrabber → (integer)
要使用的采集设备的句柄。
MaxDelay (input_control) number → (real)
这个参数已经过时,并没有效果。
Default value: -1.0
Suggested values: -1.0, 20.0, 33.3, 40.0, 66.6, 80.0, 99.9
二、先关闭窗口,再打开一个新窗口
1.关闭窗口:dev_close_window()
2.打开窗口:dev_open_window(0,0,512,512,‘black’,WindowHandle)
参数:
(前面四个参数是窗口的左上角和右下角坐标值)
(第五个参数是窗口的背景颜色)
(第六个参数是打开窗口的句柄)
三、循环采集
1.开始循环:while (true)
参数:
(true表示无限循环)
2.采集图像:grab_image_async (Image, AcqHandle, -1)
参数:
(image表示图像变量)
(Acqhandle为相机设备句柄)
(-1表示异步抓取开始和图像传送之间的最大容许延迟[ms])
3.获取图像宽度get_image_size (Image, Width, Height)
参数:
(image同上)
(后面两参数表示图像宽度,注意宽和高的顺序别写错)
4.设置显示图像宽度:dev_set_part (0, 0, Width, Height)
参数:
(分别表示显示的左上角坐标和右下角坐标,主要这里宽是纵坐标,高是横坐标,注意同上)
5.显示图像:dev_display(Image)
参数:
(显示的图像变量)
6.结束循环:endwhile
四、关闭相机
1.关闭相机:close_framegrabber (AcqHandle)
第二部分 c#篇(visual studio 2015)
一、配置环境
1.选择相应的框架平台
项目——属性——对应的框架平台(我选net framework4.5.2)
2.选择生成的平台
项目——属性——生成——目标平台(我选x64)
3.添加引用
(1)添加halcon的.net动态库halcondotnet.dll
右击引用——添加引用——浏览——选择halcon安装目录(MVTec)——bin——选择对应的net框架——选择halcondotnet.dll;
(2)添加命名空间HalconDotNet
在添加命名空间处输入 using HalconDotNet;
(3)添加halcon图像窗口控件
工具箱——公共控件——选择项——浏览——选择halcondotne.dll;
(4)将动态halcon.dll和halcondotnet.dll库复制到项目的exe所在的目录下(bin\debug)
在halcon安装目录找到对应的动态库——手动复制到项目的debug目录下(注意选择相应的平台)
(其中halcondotnet.dll可以不用复制,因为完成以上步骤后,只要编译程序,会自动添加到debug目录下,但是还是提倡手动添加一下)
二、导入halcon导出的采集显示程序
1.halcon导出c#文件
2.打开C#文件
三、c#新建Windows窗体应用程序项目
1.添加一个hWindowControl控件显示采集的图像,一般不使用hsmartwindowcontrol控件
2.添加四个bottom控件,分别修改text属性为:打开相机、关闭相机、单次执行、连续执行
3.添加一个Timer控件,用于实现循环采集,控制采集帧率(但精度不高)
4.定义一个bool变量,来记录相机开关状态
四、整合halcon导出的程序到项目中
1.复制定义变量程序
(1)在halcon导出的C#程序中,我们只需关注private void action(){}里的程序
(2)复制private void action(){}里的定义变量程序,其中HObject定义的为图像变量,而HTuple定义的为控制变量
(3)把它们复制到项目窗口类下,作为该窗口类的全局变量
2.复制打开相机程序
判断自定义的变量openCamear是否为false,如果是,打开相机,并给openCamear赋值为true,否则输出提示:“相机已打开!”
3.复制连续采集程序
(1)把定时器关闭放入采集显示的botten按钮中
(2)在定时器的Tick事件里添加halcon导出陈序的while部分,实现循环采集(注意不包含while)
3.单次采集
和定时器的Tick事件里面代码一样,但是要加多一句如下,关闭计时器。(注意一样需要判断相机是否为打开状态)
4.关闭相机
首先判断相机是否打开,如果打开,则关闭并把openCamear赋值为false,否则提示:“相机已关闭!”