Halcon与C#联合开发——1.读取图片、图像二值化

在vs中引入halcon控件

修改目标平台为 x64

拖出三个控件

代码展示

csharp 复制代码
using System;
using System.Windows.Forms;
//引用支持halcon的命名空间 
using HalconDotNet;

namespace _1.HalconDisplay {
  public partial class Form1 : Form {
    // HObject 是Halcon库中表示图像和其他图形对象的类。在这里,声明了几个图像对象
    HObject ho_Image, ho_Regions, ho_ConnectedRegions, ho_SeletedRegions;
    // HTuple 则是Halcon库中用来存储元组(tuple)的类,它可以用来存储各种类型的数据。在这里,声明了几个用来存储图像宽度、高度和窗口句柄的变量。
    HTuple hy_Width = null, hy_Height = null, hy_WindowHandle = null;

    public Form1() {
      InitializeComponent();
    }

    // 运行按钮
    private void btnRun_Click(object sender, EventArgs e) {
      // HOperatorSet 是Halcon库中的一个操作符集合,包含了大量的图像处理函数和操作符。
      // GenEmptyObj 用于生成一个空的图像对象。
      HOperatorSet.GenEmptyObj(out ho_Image);
      HOperatorSet.GenEmptyObj(out ho_Regions);
      HOperatorSet.GenEmptyObj(out ho_ConnectedRegions);
      HOperatorSet.GenEmptyObj(out ho_SeletedRegions);

      //检测窗口是否打开
      // HDevWindowStack 是用于管理Halcon显示窗口的堆栈
      // IsOpen():检查当前是否有Halcon显示窗口处于打开状态
      if (HDevWindowStack.IsOpen()) {
        // Pop() 从堆栈中弹出(移除)最顶部的窗口,并返回对应的窗口句柄。
        HOperatorSet.CloseWindow(HDevWindowStack.Pop());
      }

      // Dispose() 释放对象占用的资源
      ho_Image.Dispose();
      //ReadImage 读取图像
      HOperatorSet.ReadImage(out ho_Image, "printer_chip/printer_chip_01");
      // GetImageSize 获取图像大小
      HOperatorSet.GetImageSize(ho_Image, out hy_Width, out hy_Height);
      // SetWindowAttr() 设置Halcon显示窗口的属性
      HOperatorSet.SetWindowAttr("background_color", "blue");
      HOperatorSet.OpenWindow(0, 0, hWindowControl1.Width, hWindowControl1.Height, hWindowControl1.HalconWindow, "visible", "", out hy_WindowHandle);

      HDevWindowStack.Push(hy_WindowHandle);
      //显示图像
      if (HDevWindowStack.IsOpen()) {
        // DispObj 是Halcon库中用于在交互式开发环境中显示图像对象的函数。
        // HDevWindowStack.GetActive() 获取当前活动的Halcon显示窗口
        HOperatorSet.DispObj(ho_Image, HDevWindowStack.GetActive());
      }
    }

    // 图像二值化
    private void btn_Threshold_Click(object sender, EventArgs e) {
      ho_Regions.Dispose();
      //二值化
      HOperatorSet.Threshold(ho_Image, out ho_Regions, 128, 255);

      ho_ConnectedRegions.Dispose();
      //连通预处理
      HOperatorSet.Connection(ho_Regions, out ho_ConnectedRegions);
      
      //特征筛选
      ho_SeletedRegions.Dispose();
      HOperatorSet.SelectShape(ho_ConnectedRegions, out ho_SeletedRegions, "area", "and", 28084.7, 33809.1);
      
      if (HDevWindowStack.IsOpen()) {
        HOperatorSet.DispObj(ho_Image, HDevWindowStack.GetActive());
      }
      
      //显示筛选后的区域
      if (HDevWindowStack.IsOpen()) {
        HOperatorSet.SetColor(HDevWindowStack.GetActive(), "green");
        HOperatorSet.DispObj(ho_SeletedRegions, HDevWindowStack.GetActive());
      }

      ho_Image.Dispose();
      ho_Regions.Dispose();
    }
  }
}

结果

点击运行按钮可以加载出图片

点击二值化按钮可以将该图片进行二值化处理

相关推荐
YOLO数据集集合2 分钟前
车牌目标检测数据集 | 车牌检测 智能交通 车辆识别 目标检测8003期
人工智能·目标检测·计算机视觉·车牌检测·非机动车车牌
磁场转动100万匹13 分钟前
OpenCV 答题卡识别判卷实战:从图像预处理到自动评分
人工智能·opencv·计算机视觉
就是一顿骚操作2 小时前
ViT:把图像切成词之后,Transformer 如何进入计算机视觉
人工智能·深度学习·计算机视觉·transformer·论文解读
阿图灵3 小时前
OpenCV 绘图五件套:画圆、文本、线段、矩形与椭圆
图像处理·人工智能·python·opencv·计算机视觉·绘图
棉晗榜3 小时前
C# HttpClient配置具有tls指纹发起跟浏览器一样的请求解决反爬虫防护
开发语言·爬虫·c#
吴可可1234 小时前
在CAD中点击添加多段线顶点的方法与实现
c#
全栈小54 小时前
【C#】.net core,静态方法线程安全解析,面试时经常被问的线程安全就藏在里面
安全·c#·.netcore
YOLO数据集集合4 小时前
蚊子目标检测数据集 | 蚊虫检测 病媒生物 智能硬件 轻量化模型 目标检测 YOLO格式 深度学习数据集9015期
深度学习·yolo·目标检测·计算机视觉·分类·智能硬件·蚊子识别
YOLO数据集集合5 小时前
煤炭质量目标检测数据集 、| 煤炭检测 工业视觉 质量分级 异物检测 煤炭异物8005期
人工智能·yolo·目标检测·计算机视觉·分类·煤炭检测数据集·异物数据集
天下无敌笨笨熊5 小时前
C#视频开发心得
开发语言·c#·音视频