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

在vs中引入halcon控件

在这里插入图片描述
修改目标平台为 x64
在这里插入图片描述

拖出三个控件

在这里插入图片描述

代码展示

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

结果

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

在这里插入图片描述

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/492474.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CentOS7下nginx部署测试

nginx部署测试 #安装程序和依赖yum install -y vim net-tools wgetyum -y install gcc pcre-devel zlib-devel openssl openssl-devel #下载nginx mkdir /opt/nginx cd /opt/nginx wget https://nginx.org/download/nginx-1.20.2.tar.gz#解压 tar zxvf nginx-1.20.2.tar.gz c…

Docker容器与虚拟化技术:OpenEuler 部署 Docker UI

目录 一、实验 1.环境 2.OpenEuler 部署 docker-compose-ui 2.OpenEuler 部署 docker ui 3.使用cpolar内网穿透 二、问题 1.docker run -w 的作用 一、实验 1.环境 (1)主机 表1 主机 系统架构版本IP备注LinuxopenEuler22.03 LTS SP2 192.168…

PMBOK第八版、项目管理AI标准...PMI标准今年有这些进展

项目管理实践标准不断在演变,PMI作为项目管理领域的权威机构,一直致力于与全球各行各业的项目实践者一同探索和研究最新的行业标准,确保PMI标准符合全球项目专业人士当前能力建设与职业发展的需要。 今年以来,我们发布了一系列PM…

Python提取本体文件的数据

运行结果: 使用replace函数去除前缀。 查找OWL的对象属性: 输出结果: 出现最后这个的原因: 修改程序: 最后的输出结果: 这个解析之后是这个样子的:

考研数学|《1800》《1000》《880》《660》最佳搭配使用方法

直接说结论:基础不好先做1800、强化之前660,强化可选880/1000题。 首先,传统习题册存在的一个问题是题量较大,但难度波动较大。《汤家凤1800》和《张宇1000》题量庞大,但有些题目难度不够平衡,有些过于简单…

代码随想录训练营第59天 | LeetCode 503.下一个更大元素II、LeetCode 42. 接雨水

目录 LeetCode 503.下一个更大元素II 文章讲解:代码随想录(programmercarl.com) 视频讲解:单调栈,成环了可怎么办?LeetCode:503.下一个更大元素II_哔哩哔哩_bilibili 思路 ​​​​​​LeetCode 42. 接雨水 文章…

Compute Express Link (CXL): An Open Interconnect for Cloud Infrastructure——论文阅读

DAC 2023 Paper CXL论文阅读笔记整理 背景 Compute Express Link是一种开放的行业标准互连,在PCI Express(PCIe)之上提供缓存和内存语义,具有资源池和织物功能。本文探讨了CXL在解决云基础设施中的一些挑战方面的作用。 CXL主要…

数据化运营09 抓住问题关键:用相关性分析拆解多个影响因素

前一讲,和你探讨了多维分析的方法,通过多维分析来寻找指标变化的原因。当我们找到问题的原因时,自然会进一步思考一个问题:指标变化的原因这么多,决定问题的关键因素又是哪个呢? 需要专栏原数据进行实操的同…

Linux小程序——进度条

前言:哈喽小伙伴们,经过我们对多个Linux基本开发工具的学习之后,对于Linux的使用也算是更上一层楼。 所以这篇文章,我们就尝试使用我们学过的Linux知识来写一个小程序——进度条,达到实践以及加深知识映像的效果。 目…

智能文档处理技术综述

一、 智能文档处理介绍 智能文档处理(Intelligent Document Processing, IDP)是利用人工智能(AI)、机器学习(ML)、计算机视觉(CV)、自然语言处理(NLP)等技术…

POJ3037 + HDU-6714

两道最短路好题 POJ3037 手玩一下 发现每一点的速度可以直接搞出来&#xff0c;就是pow(2,h[1][1]-h[i][j])*V 那么从这个点出发到达别的点的耗费的时间都是上面这个数的倒数&#xff0c;然后直接跑最短路就好了 #include<iostream> #include<vector> #include<…

BeanPostProcessors是什么以及如何使用?

目录 一、BeanPostProcessors是什么&#xff1f;二、如何使用 BeanPostProcessor1、实现 BeanPostProcessor 接口2、注册 BeanPostProcessor3、示例代码 三、使用场景四、注意事项 一、BeanPostProcessors是什么&#xff1f; BeanPostProcessor 是 Spring 框架提供的一个扩展点…

Java多线程实战-从零手搓一个简易线程池(一)定义任务等待队列

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java全栈-专栏 &#x1f3f7;️本系列源码仓库&#xff1a;多线程并发编程学习的多个代码片段(github) &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正…

每日一题——LeetCode1748.唯一元素的和

方法一 两次遍历 var sumOfUnique function(nums) {let map new Map()for(let num of nums){map.set(num,map.has(num)?map.get(num)1:1)}let res0for(let num of nums){if(map.get(num)1) resnum}return res }; 消耗时间和内存情况&#xff1a; 方法二 一次遍历 var su…

新书速递——《可解释AI实战(PyTorch版)》

本书旨在帮助你实施最新的可解释AI技术&#xff0c;以构建公平且可解释的AI系统。可解释AI是当今AI研究中的热门话题&#xff0c;但只有少数资源和指南涵盖了所有重要技术&#xff0c;这些技术对实践者来说非常有价值。本书旨在填补这一空白。 本书读者对象 本书既适合那些有兴…

揭秘神秘商业模式:看似赔钱的买卖,如何月赚600万?

你是否曾被一个看似赔钱的买卖所吸引&#xff0c;最终却惊喜地发现它一个月竟然能赚600多万&#xff1f;这样的数字&#xff0c;是否让你感到意外又好奇&#xff1f;如果你仔细品味我们今天的内容&#xff0c;我相信&#xff0c;你也能开启属于自己的赚钱之路。 他们是如何实现…

自学编程的六种方法,你必须知道

随着互联网日趋迅猛&#xff0c;编程已经在我们生活当中无处不在了。众所周知&#xff0c;程序员的工资都很不错&#xff0c;于是越来越多的人&#xff0c;都想加入到编程的行业中来。那么如何加入到程序员的行业当中&#xff1f; PHP从入门到放弃&#xff0c;C语言从入门到放…

【CSDN活动】程序员职业生涯的分水岭:年龄还是经验?

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 程序员职业生涯的分水岭&#xff1a;年龄还是经验&#xff1f;引言技术更新换代…

基于nodejs+vue在线学籍管理系统python-flask-django-php

系统开发主要在 Windows 系统下进行&#xff0c;采用支持跨平台的nodejs语言开发完成&#xff0c;因此可以运行在任意开发环境下。系统采用mysql数据库的方式&#xff0c;按照express框架进行开发。 前端技术&#xff1a;nodejsvueelementui, Express 框架于Node运行环境的Web框…

windows10彻底关闭Windows Defender的4种方法

Windows Defender是windows10系统自带的杀毒软件。默认情况下它处于打开的状态。大多数第三方的杀毒软件都可以识别&#xff0c;并代替它。 但是大多数情况下&#xff0c;我们总是有各种理由需要关闭它&#xff0c;例如 Windows Defender 导致资源使用率高或系统出现其他问题&…