利用Halcon18.11联合VS2015实时打开笔记本谁摄像头。
利用Halcon自带的“hWindowControl1”实时显示
首先建立一个C#的winform界面程序,添加对应的控件。
(与Halcon联合编程时,需要对Halcon的DLL库进行添加引用,如何添加引用在之前博客已有说明。在此不再赘述,接下来简单介绍如何添加 hWindowControl1 控件)
添加 hWindowControl1 控件:
1、在 Form 窗口中 点开工具箱,右键点击工具箱内得任意位置。进入如下图所示界面
2. 点击 浏览。进入Halcon安装目录下的“…\bin\dotnet35”。选择 “halcondotnet.dll” 文件(与添加C#引用的DLL是同一个),进行打开之后确定添加即可。
3.就能够在工具栏中看到如下图所示的图标工具。
在Halcon中的助手中设定实时采集设备为笔记本摄像头,进而生成代码文件
- 点击–>助手 ,采集设备选择为 directshow[0] ,从连接中点击实时,使摄像头保持实时采集图片。最后点击生成代码。结果如下图:
为了便于显示在图像中,添加如下图所示两行代码
2.点击导出,导出C#代码文件
3. 在C#中的界面中添加工具(实时显示图像我们设定在计时器中进行,当然也可以另设一个线程),如下图所示:
4.对各个按钮添加相对应的事件。主要代码块如下:
private void OpenCam_Click(object sender, EventArgs e) //打开相机并且初始化相机
{
HOperatorSet.GenEmptyObj(out ho_Image);
//Image Acquisition 01: Code generated by Image Acquisition 01
hv_AcqHandle.Dispose();
HOperatorSet.OpenFramegrabber("DirectShow", 1, 1, 0, 0, 0, 0, "default", 8, "rgb",
-1, "false", "default", "[0] ", 0, -1, out hv_AcqHandle);
HOperatorSet.GrabImageStart(hv_AcqHandle, -1);
}
private void ShowCam_Click(object sender, EventArgs e) //进行实时显示相机
{
timer1.Enabled = true;
HOperatorSet.OpenWindow(0, 0, hWindowControl1.Size.Width, hWindowControl1.Size.Height, hWindowControl1.HalconWindow, "visible", "", out hv_WindowHandle);
HDevWindowStack.Push(hv_WindowHandle);
}
private void timer1_Tick(object sender, EventArgs e) //相机在计时器内实时显示
{
ho_Image.Dispose();
HOperatorSet.GrabImageAsync(out ho_Image, hv_AcqHandle, -1);
HOperatorSet.GetImageSize(ho_Image, out hv_Width, out hv_Height);
if (HDevWindowStack.IsOpen())
{
HOperatorSet.SetPart(hv_WindowHandle, 0, 0, hv_Height, hv_Width);
}
//显示
if (HDevWindowStack.IsOpen())
{
HOperatorSet.DispObj(ho_Image, hv_WindowHandle);//显示处理之前的图片
//HOperatorSet.DispObj(ho_GrayImage, HDevWindowStack.GetActive());//显示原图
}
}
private void CloseCam_Click(object sender, EventArgs e)//关闭相机
{
timer1.Enabled = false;
HOperatorSet.CloseFramegrabber(hv_AcqHandle);
ho_Image.Dispose();
hv_AcqHandle.Dispose();
hv_Width.Dispose();
hv_Height.Dispose();
}
最终显示结果如下图: