C#联合工业相机实时采集

7 篇文章 1 订阅

halcon联合C#作图像的实时采集
1、做好halcon图像采集代码并将其转化为C#语言
2、打开VS2017选择Windows窗体应用程序并设置命名工程名称与保存路径。如下图:
在这里插入图片描述
在Form1上进行工具的填写
在这里插入图片描述
单击引用在右击添加引用,图中若不显示大框中的部分,浏览引用的路径为halcon安装目录下的bin->dotnet35下的halcondotnet.dll(动态链接库),若不知道在哪里,可回到桌面右击halcon图标查看文件所在位置,然后回到VS217单击浏览按钮做如下图操作:

在这里插入图片描述
在这里插入图片描述
出现箭头所指表示引用成功
在这里插入图片描述
添加好应用之后,继续在工具箱中添加显示halcon窗体的控件,如下图步骤所示:

在这里插入图片描述
单击浏览选择上一步路径下的halcondotnet.dll(动态链接库),确定后若出现如下图的内容说明添加成功,然后点击确认即可。
在这里插入图片描述
在这里插入图片描述
如果出现下面两个选项表示添加成功,如下图:
在这里插入图片描述
此时就可以放工具hwindowcontrol在白板上了,如下图:
在这里插入图片描述
此时C#与halcon的联合就完全做完了,接下来做工具功能填充,如下图:
在这里插入图片描述
注意事项:定时器的响应周期设置为40ms。
halcon相机代码如下:
open_framegrabber ('GigEVision2', 0, 0, 0, 0, 0, 0, 'progressive', -1, 'default', -1, 'false', 'default', '08eded540710_DahuaTechnologyPBP_13MGXnpXp', 0, -1, AcqHandle) set_framegrabber_param (AcqHandle, 'ExposureTime', 2000.0) set_framegrabber_param (AcqHandle, 'GainRaw', 8.0) set_framegrabber_param (AcqHandle, 'Brightness', 50) grab_image_start (AcqHandle, -1) while (true) grab_image_async (Image, AcqHandle, -1) * Image Acquisition 01: Do something endwhile close_framegrabber (AcqHandle)
转换后的C#代码为:

//
// File generated by HDevelop for HALCON/.NET (C#) Version 17.12
//

using HalconDotNet;

public partial class HDevelopExport
{
#if !(NO_EXPORT_MAIN || NO_EXPORT_APP_MAIN)
  public HDevelopExport()
  {
    // Default settings used in HDevelop 
    HOperatorSet.SetSystem("width", 512);
    HOperatorSet.SetSystem("height", 512);
    if (HalconAPI.isWindows)
      HOperatorSet.SetSystem("use_window_thread","true");
    action();
  }
#endif

#if !NO_EXPORT_MAIN
  // Main procedure 
  private void action()
  {


    // Local iconic variables 

    HObject ho_Image=null;

    // Local control variables 

    HTuple hv_AcqHandle = null;
    // Initialize local and output iconic variables 
    HOperatorSet.GenEmptyObj(out ho_Image);
    //Image Acquisition 01: Code generated by Image Acquisition 01
    //Image Acquisition 01: Attention: The initialization may fail in case parameters need to
    //Image Acquisition 01: be set in a specific order (e.g., image resolution vs. offset).
    HOperatorSet.OpenFramegrabber("GigEVision2", 0, 0, 0, 0, 0, 0, "progressive", 
        -1, "default", -1, "false", "default", "08eded540710_DahuaTechnologyPBP_13MGXnpXp", 
        0, -1, out hv_AcqHandle);
    HOperatorSet.SetFramegrabberParam(hv_AcqHandle, "ExposureTime", 2000.0);
    HOperatorSet.SetFramegrabberParam(hv_AcqHandle, "GainRaw", 8.0);
    HOperatorSet.SetFramegrabberParam(hv_AcqHandle, "Brightness", 50);
    HOperatorSet.GrabImageStart(hv_AcqHandle, -1);
    while ((int)(1) != 0)
    {
      ho_Image.Dispose();
      HOperatorSet.GrabImageAsync(out ho_Image, hv_AcqHandle, -1);
      //Image Acquisition 01: Do something
    }
    HOperatorSet.CloseFramegrabber(hv_AcqHandle);
    ho_Image.Dispose();

  }

#endif


}
#if !(NO_EXPORT_MAIN || NO_EXPORT_APP_MAIN)
public class HDevelopExportApp
{
  static void Main(string[] args)
  {
    new HDevelopExport();
  }
}
#endif

最后联合C#编写
1、在WinForm界面上依次双击打开相机按钮、图像采集按钮、关闭相机按钮,定时器timer1的方法程序。
2、找到halcon导出的C#文件双击进去,然后找到using HalconDotNet;的命名空间并将其拷贝到WinForm界面程序中,导出的C#程序如下。

3、在上述的C#程序中,只需关注action函数里面的,其中变量放在打开相机按钮方法的前面,程序如下:

//定义变量
    HObject ho_Image=null;
    HTuple hv_AcqHandle = null;

4、while与变量之间的程序放在打开相机按钮方法里面,程序如下:

//打开相机按钮的办法
HOperatorSet.GenEmptyObj(out ho_Image);
    HOperatorSet.OpenFramegrabber("GigEVision2", 0, 0, 0, 0, 0, 0, "progressive", 
        -1, "default", -1, "false", "default", "08eded540710_DahuaTechnologyPBP_13MGXnpXp", 
        0, -1, out hv_AcqHandle);
    HOperatorSet.SetFramegrabberParam(hv_AcqHandle, "ExposureTime", 2000.0);
    HOperatorSet.SetFramegrabberParam(hv_AcqHandle, "GainRaw", 8.0);
    HOperatorSet.SetFramegrabberParam(hv_AcqHandle, "Brightness", 50);
    HOperatorSet.GrabImageStart(hv_AcqHandle, -1);

5、启动定时器的程序放在图像采集按钮的方法里面,程序如下:

        //图像采集按钮的方法
        private void button2_Click(object sender, EventArgs e)
        {
            timer1.Enabled = true;
        }

6、关闭相机与停止定时器的程序放在关闭相机按钮方法里面,程序如下:

        //关闭相机按钮的方法
        private void button3_Click(object sender, EventArgs e)
        {
            HOperatorSet.CloseFramegrabber(hv_AcqHandle);  //关闭相机
            timer1.Enabled = false;   //停止定时器
        }

7、定时器中的程序为while语句中的代码段,程序如下:

//定时器响应的方法
        private void timer1_Tick(object sender, EventArgs e)
        {
            ho_Image.Dispose();
            HOperatorSet.GrabImageAsync(out ho_Image, hv_AcqHandle, -1);
            }
        }

8、为了将halcon窗口覆盖到WinForm界面的窗体上,找到HOperatorSet.OpenWindow修改参数,修改内容如下:
原程序HOperatorSet.OpenWindow(0,0,512,512,0,“visible”,"",out hv_WindowHandle);
修改程序:
HOperatorSet.OpenWindow(0, 0, hWindowControl1.Width, hWindowControl1.Height, hWindowControl1.HalconWindow, “visible”, “”, out hv_WindowHandle);

借鉴博客https://blog.csdn.net/weixin_39800738/article/details/98596583?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160626496219725225008242%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=160626496219725225008242&biz_id=0&spm=1018.2118.3001.4449内容,谢谢原作的分享

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值