Halcon与C#混合编程--打开笔记本摄像头实时采集

利用Halcon18.11联合VS2015实时打开笔记本谁摄像头。
利用Halcon自带的“hWindowControl1”实时显示

首先建立一个C#的winform界面程序,添加对应的控件。

(与Halcon联合编程时,需要对Halcon的DLL库进行添加引用,如何添加引用在之前博客已有说明。在此不再赘述,接下来简单介绍如何添加 hWindowControl1 控件)

添加 hWindowControl1 控件:

1、在 Form 窗口中 点开工具箱,右键点击工具箱内得任意位置。进入如下图所示界面
在这里插入图片描述
2. 点击 浏览。进入Halcon安装目录下的“…\bin\dotnet35”。选择 “halcondotnet.dll” 文件(与添加C#引用的DLL是同一个),进行打开之后确定添加即可。
在这里插入图片描述
3.就能够在工具栏中看到如下图所示的图标工具。
在这里插入图片描述

在Halcon中的助手中设定实时采集设备为笔记本摄像头,进而生成代码文件

  1. 点击–>助手 ,采集设备选择为 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();
        }



最终显示结果如下图:
在这里插入图片描述

Halcon 是一款强大的工业视觉软件,它提供了一系列的工具用于图像处理、分析及机器视觉应用。结合 C# 实现实时图像采集的过程主要包括以下几个步骤: ### 步骤一:准备环境 1. **安装 Halcon**: 首先,你需要安装 Halcon 软件,并配置好相应的开发环境。 2. **安装 .NET Framework 或者 Visual Studio**: C# 编程通常需要这些环境的支持。确保安装了最新版本的 .NET Framework 或 Visual Studio。 ### 步骤二:编写 C# 代码 你可以通过 HALCON 的 COM 接口在 C# 中访问其功能。首先,在你的 C# 项目中引入 HALCON 的 COM 组件库。例如: ```csharp using HalconDotNet; ``` 然后,创建一个简单的程序来初始化 HALCON 环境并打开摄像头获取图像: ```csharp public void InitializeCamera() { // 初始化 Halcon 环境 HEnvironment.Initialize(); // 打开摄像头设备 HCaptureDevice cam = new HCaptureDevice(); cam.Open("Default", "Camera"); // 获取图像数据 HImage img = cam.GetImage(); } // 示例函数:运行前需调用InitializeCamera()函数初始化环境 public void CaptureImage() { InitializeCamera(); // 图像保存到硬盘,此处仅做演示,实际应用中可能需要更复杂的图像处理 HFile file = new HFile(); file.WriteImage(img, "image.jpg"); } ``` ### 步骤三:集成 HALCONC# 将上述 C# 函数放入你的应用程序中,每当需要获取图像时调用 `CaptureImage()` 函数即可。确保在退出应用程序之前关闭 Halcon 环境: ```csharp public void DisposeHalconResources() { if (cam != null) cam.Close(); HEnvironment.Finalize(); } ``` ### 相关问题: 1. 是否需要特定的硬件支持(如相机、光源等)来配合 Halcon 实现图像采集? 2. Halcon 提供了哪些高级功能可以进一步优化图像采集过程? 3. 如何在异常处理中捕获并处理 HALCON API 的错误信息?
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值