关于C#调用halcon dll的过程及C#halcon联合开发

一、如何在C#中创建window窗口及利用haclon编程

1.首先在已安装的Visual studio 2022中创建需要联合的windows窗体项目

这里是利用的C#语言进行编程,在选项框中寻找到Windows窗体应用(.NET framework)并创建

2.在halcon软件的根目录中寻找dll文件,在x64文件夹中选择halcon.dll文件,然后在上级目录中寻找dotnet35文件夹,并选择其中所有dll文件。一并复制。

3.进入创建的联合项目,将选择的dll文件复制在\bin\Debug目录下

4.复制完成后,选择引用,添加引用,浏览并选择halcondotnet.dll文件,如果未找到,在下方浏览中寻找之前保存的路径。右侧引用出现halcondotnet表示引用成功

5.添加 halcon 图像显示控件。引用完成后,将此前文件夹中的halcondotnet.dll再次复制拖入至工具箱(ctrl+alt+x)并选择HWindowControl,即可得到haclon自带的窗口。

6.注:项目中系统默认的为32位生成,请将选项关闭再进行调试。

否则会显示格式报错。

二、halcon在C#中的基础应用

1.利用工具箱添加halcon窗口及按键,下拉框,文本框,双击按键创建点击事件

2。首先创建一个基础对象ho_image

 HObject ho_image;

3.在构造函数中创建三个下拉框变量

 public Form1()
 {
     InitializeComponent();
     comboBox1.Items.Add("area");
     comboBox1.Items.Add("circularity");
     comboBox1.Items.Add("rectangularity");
 }


4.双击按键1进入点击事件

在事件中利用OpenFileD   OpenFileDialog dlg = new OpenFileDialog();实例化。实例化此类可以设置弹出一个文件对话框,其中FileName属性可以返回选中文件的路径。适用选中一个文件,如果是多个文件就用 FileNames,用数组接收。

这里是打开一个文件选择对话框,让用户选择一个图像文件。如果用户选择了一个文件并点击了对话框的确认按钮,代码将会读取选中的图像文件并存储在ho_image变量中。
 

 OpenFileDialog dlg = new OpenFileDialog();
 if (dlg.ShowDialog() == DialogResult.OK)
 {
     HOperatorSet.ReadImage(out ho_image, dlg.FileName);
 }

5.进行图像的基础halcon代码处理并通过

HOperatorSet.DispObj(SelectionRegion, hWindowControl1.HalconWindow);

将运算后的变量打印在窗口上。
 

//设置图片的宽高属性并获取
HTuple width, height;
HOperatorSet.GetImageSize(ho_image, out width, out height);
//hWindowControl_readimage.HalconWindow--获得窗体句柄
HOperatorSet.SetPart(hWindowControl1.HalconWindow, 0, 0, height - 1, width - 1);
//进行图片阈值分割,在0-50的灰度值中
HObject Region;
HOperatorSet.Threshold(ho_image, out Region, 0, 50);
//进行边缘检测,并输出子像素精确的边缘位置
HObject ho_edges;
HOperatorSet.EdgesSubPix(ho_image, out ho_edges, "canny", 1, 20, 40);
//将图片进行打散处理
HObject ConnectionRegion;
HOperatorSet.Connection(Region, out ConnectionRegion);
//筛选面积为1000-3000的子项
HObject SelectionRegion;
HOperatorSet.SelectShape(ConnectionRegion, out SelectionRegion, comboBox1.SelectedItem.ToString(), "and", double.Parse(textBox1.Text), double.Parse(textBox2.Text));
//输出并显示最终结果在创建的hWindowControl1窗口上
HOperatorSet.DispObj(SelectionRegion, hWindowControl1.HalconWindow);
HOperatorSet.DispObj(ho_edges, hWindowControl1.HalconWindow);

三、效果

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

namespace halcon_联合编程
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            comboBox1.Items.Add("area");
            comboBox1.Items.Add("circularity");
            comboBox1.Items.Add("rectangularity");
        }
        HObject ho_image;
        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                HOperatorSet.ReadImage(out ho_image, dlg.FileName);
            }
            //设置图片的宽高属性并获取
            HTuple width, height;
            HOperatorSet.GetImageSize(ho_image, out width, out height);
            //hWindowControl_readimage.HalconWindow--获得窗体句柄
            HOperatorSet.SetPart(hWindowControl1.HalconWindow, 0, 0, height - 1, width - 1);
            //进行图片阈值分割,在0-50的灰度值中
            HObject Region;
            HOperatorSet.Threshold(ho_image, out Region, 0, 50);
            //进行边缘检测,并输出子像素精确的边缘位置
            HObject ho_edges;
            HOperatorSet.EdgesSubPix(ho_image, out ho_edges, "canny", 1, 20, 40);
            //将图片进行打散处理
            HObject ConnectionRegion;
            HOperatorSet.Connection(Region, out ConnectionRegion);
            //筛选面积为1000-3000的子项
            HObject SelectionRegion;
            HOperatorSet.SelectShape(ConnectionRegion, out SelectionRegion, comboBox1.SelectedItem.ToString(), "and", double.Parse(textBox1.Text), double.Parse(textBox2.Text));
            //输出并显示最终结果在创建的hWindowControl1窗口上
            HOperatorSet.DispObj(SelectionRegion, hWindowControl1.HalconWindow);
            HOperatorSet.DispObj(ho_edges, hWindowControl1.HalconWindow);

        }

        
    }
}


 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C#调用Halcon引擎可以通过添加引用halcondotnet.dll和hdevenginedonet.dll来实现。以下是两种调用Halcon引擎的方法: 1. 在C#中使用Halcon引擎调用Halcon程序 首先,需要在Halcon中导出C#文件,然后在C#调用。具体步骤如下: - 在Halcon中打开需要调用的程序。 - 选择“文件”->“导出”->“导出C#文件”。 - 在C#中添加对halcondotnet.dll和hdevenginedonet.dll的引用。 - 在C#中创建Halcon引擎实例并调用Halcon程序。 以下是一个示例代码: ```csharp using HalconDotNet; class Program { static void Main(string[] args) { // 创建Halcon引擎实例 HDevEngine engine = new HDevEngine(); engine.SetScriptPath("path/to/halcon/program"); // 调用Halcon程序 engine.ExecuteScript("halcon_program.cs"); } } ``` 2. 在C#中使用Halcon引擎调用.hdev下本地函数或者.hdvp外部函数 在C#中使用Halcon引擎调用.hdev下本地函数或者.hdvp外部函数也是通过添加引用halcondotnet.dll和hdevenginedonet.dll来实现。具体步骤如下: - 在C#中添加对halcondotnet.dll和hdevenginedonet.dll的引用。 - 在C#中创建Halcon引擎实例并调用.hdev下本地函数或者.hdvp外部函数。 以下是一个示例代码: ```csharp using HalconDotNet; class Program { static void Main(string[] args) { // 创建Halcon引擎实例 HDevEngine engine = new HDevEngine(); // 调用.hdev下本地函数 engine.CallProcedure("local_procedure"); // 调用.hdvp外部函数 engine.CallExternalProcedure("external_procedure", "path/to/external/procedure.hdvp"); } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值