用多线程实现c#实时读取halcon图像

一、前期创建工程和设计UI界面

三个Button按钮以及一个从halcon导入的窗口。

二、实现思路及代码

1.首先要获得相机句柄,这里要打开halcon软件去获取当前使用的相机参数,例如下图可供参考

open_framegrabber ('GigEVision2', 0, 0, 0, 0, 0, 0, 'progressive', -1, 'default', -1, 'false', 'default', 'QT1-023-A-CAM2', 0, -1, AcqHandle)

我们想要打开相机,就需要将这句Halcon软件中的语句转化为C#语句,来获取相机的打开。

具体代码如下:

  HOperatorSet.OpenFramegrabber("GigEVision2", 0, 0, 0, 0, 0, 0, "progressive", -1, "default", -1, "false", "default", "QT1-023-A-CAM2", 0, -1,out AcqHandle);

因为在语句的最后,我们要注意语法规则,自己去定义窗口输出的名称,并且在其前面加上“out”字符。

2.在获得相机的打开后,我们要能进行获取图像的操作。我们继续观察刚才Halcon中的语句,发现​​​​​​这个语句所执行的功能正是抓取图像。因此我们在第二个按钮,可以转化下面的C#语句

   HOperatorSet.GrabImageAsync(out ImageA, AcqHandle, -1);

注意,ImageA是输出的结果,即相机所抓取图像的变量名。

在抓取后,我们需要将图片与窗口进行匹配,因此我们需要添加以下代码让抓取的图片可以展示在窗口。

 HTuple width, height;
 HOperatorSet.GetImageSize(ImageA, out width, out height);
 HOperatorSet.SetPart(hWindowControl1.HalconWindow, 0, 0, width - 1, height - 1);
 HOperatorSet.DispObj(ImageA, hWindowControl1.HalconWindow);

第三行中,width-1,height-1是为了让图片可以平铺在窗口。如果不了解的朋友,可以去试一下别的或者搜索相关内容。

3.当我们抓取完图片后,应当写入关闭相机的代码,因此我们在第三个按钮中添加以下代码来实现相关功能。

HOperatorSet.CloseFramegrabber(AcqHandle);

4.当我们完成前三步操作后,发现虽然可以实现相机的打开,抓取图片以及关闭。但无法实现连续的操作,因此,我们需要添加简单的多线程,来使得我们的相机可以多次使用。除此之外,我们也要考虑一定的防呆功能,减少功能的错误操作。下面是完整代码:

using HalconDotNet;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace _20240822_class
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
            button2.Enabled = false;
            button_closeAcqHandle.Enabled = false;
        }
        HTuple AcqHandle;
        Thread GrabRun;
        private void button1_Click(object sender, EventArgs e)
        {
            button2.Enabled = true;

            /// <summary>
            /// 相机句柄
            /// </summary>


            HOperatorSet.OpenFramegrabber("GigEVision2", 0, 0, 0, 0, 0, 0, "progressive", -1, "default", -1, "false", "default", "QT1-023-A-CAM2", 0, -1,out AcqHandle);
             
            
        }
        private void Run()
        {
            while (! isStop)
            {
                HOperatorSet.GrabImageAsync(out ImageA, AcqHandle, -1);
                HTuple width, height;
                HOperatorSet.GetImageSize(ImageA, out width, out height);
                HOperatorSet.SetPart(hWindowControl1.HalconWindow, 0, 0, width - 1, height - 1);
                HOperatorSet.DispObj(ImageA, hWindowControl1.HalconWindow);
            }
        }
        HObject ImageA;
        private void button2_Click(object sender, EventArgs e)
        {
           
            button_closeAcqHandle.Enabled = true;
            isStop = false;
            GrabRun = new Thread(Run);
            GrabRun.Start();
        }
        bool isStop=false;
        private void button_closeAcqHandle_Click(object sender, EventArgs e)
        {
            isStop=true;
            GrabRun.Abort();
            GrabRun = null;

            HOperatorSet.CloseFramegrabber(AcqHandle);
            button2.Enabled = false;
            button_closeAcqHandle.Enabled = false;
        }
    }
}

首先,将照片的展示功能封装到一个Run函数方法中,可以简化别的按钮中的代码行数,起到简洁化和模块化。其次,通过设置GrabRun这个变量,其属性便是多线程,通过调用它来实现多线程。为了减少错误操作,当我们第一次启动时,只能点击获取相机按钮。当“获取相机”的代码运行完后,在启用“抓取图片”的功能按钮,同时“获取相机”按钮关闭。同理下一个“关闭按钮”。

三、最终效果

### 回答1: Halcon是一款工业视觉软件,可用于机器人视觉、自动化和品质控制等领域。而C语言作为一个底层语言,可以提供更高的性能和灵活性。 使用Halcon联合C,能够帮助开发者从底层开始构建自己的计算机视觉应用程序。C语言可以用来编写高效的算法,而Halcon则可以提供可视化编程界面和现成的图像处理函数库。开发者可以使用C语言实现自己的算法,然后将算法进行封装,以便在Halcon中使用。 使用Halcon联合C还有许多其他好处。例如,开发者可以利用C语言进行低级别的图像控制和数据_IO,然后使用Halcon进行高级别的控制(例如表面匹配,物体检测和识别,特征提取等)。 此外,Halcon联合C还可以帮助开发者提高性能并减少内存使用,尤其是在大型图像处理任务中。由于C语言提供更多的内存和速度控制,因此将其与Halcon结合使用可以实现更多的资源优化。 总之,通过将Halcon与C结合使用,开发者可以在计算机视觉应用程序中获得性能和灵活性的最佳平衡。无论是将两者结合来创建底层算法,还是使用Halcon实现高级别的控制,开发者都可以受益于这种组合。 ### 回答2: Halcon和C一起使用可以实现图像处理算法的高效开发和优化,从而实现高速、准确的图像处理和计算机视觉任务。Halcon作为一款成熟的图像处理软件,具有强大的图像处理算法库和用户界面,可以方便地进行图像采集、预处理、分析和展示。而C语言,则是一种通用、高效的编程语言,可以进行具有复杂性能要求的图像处理算法的优化和实现Halcon提供了方便的接口,使得用户可以用C语言与Halcon进行交互,实现自定义算法的快速开发和优化。同时,Halcon和C联合使用还可以实现对嵌入式设备或FPGA等硬件平台的支持,从而提高其运算速度和实现更多的计算能力。总而言之,Halcon和C的联合使用可以使得图像处理应用程序的开发更加高效和灵活,为许多领域,如机器视觉、自动化生产线、医疗影像等提供更好的解决方案。 ### 回答3: Halcon是一款强大的计算机视觉软件,具有很高的灵活性和可扩展性。Halcon可以与其他软件和编程语言进行联合使用,其中包括C语言。 Halcon联合C语言的主要优点是,可以利用C语言进行高级算法的开发和优化,同时利用Halcon进行图像处理和计算机视觉应用的实现。这种联合使用可以提高程序的性能和效率,节省开发时间和成本。 Halcon提供了与C语言进行集成的API接口,可以方便地进行数据传输和函数调用。同时,Halcon还支持C语言编写的DLL动态链接库,可以轻松地将Halcon集成到现有的C语言项目中。 除此之外,Halcon还提供了丰富的开发文档和示例程序,帮助开发人员快速掌握联合使用的技巧和方法。 综上所述,Halcon联合C语言可以充分发挥两者的优势,提高开发效率和程序性能,使图像处理和计算机视觉应用开发更加便捷和高效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值