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();
    }
  }
}

结果

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

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

相关推荐
CoovallyAIHub6 分钟前
YOLOv8-SMOT:基于切片辅助训练与自适应运动关联的无人机视角小目标实时追踪框架
深度学习·算法·计算机视觉
CoovallyAIHub17 分钟前
全景式综述|多模态目标跟踪全面解析:方法、数据、挑战与未来
深度学习·算法·计算机视觉
Caaacy_YU2 小时前
多模态大模型研究每日简报【2025-08-21】
论文阅读·人工智能·机器学习·计算机视觉
EanoJiang4 小时前
仿神秘海域/美末环境交互的程序化动画学习
游戏·c#
妮妮学代码13 小时前
c#:TCP服务端管理类
java·tcp/ip·c#
SchuylerEX14 小时前
第六章 JavaScript 互操(2).NET调用JS
前端·c#·.net·blazor·ui框架
★YUI★14 小时前
学习游戏制作记录(制作系统与物品掉落系统)8.16
学习·游戏·ui·unity·c#
爱分享的飘哥14 小时前
第八十三章:实战篇:文 → 图:Prompt 控制图像生成系统构建——从“咒语”到“神作”的炼成!
人工智能·计算机视觉·prompt·文生图·stablediffusion·diffusers·text-to-image
audyxiao00115 小时前
为了更强大的空间智能,如何将2D图像转换成完整、具有真实尺度和外观的3D场景?
人工智能·计算机视觉·3d·iccv·空间智能
范男18 小时前
基于Pytochvideo训练自己的的视频分类模型
人工智能·pytorch·python·深度学习·计算机视觉·3d·视频