首页 > 编程语言 >小白成长第二天:利用C#调用Halcon初步实现阈值分割方法

小白成长第二天:利用C#调用Halcon初步实现阈值分割方法

时间:2024-08-20 18:22:06浏览次数:14  
标签:分割 HOperatorSet 阈值 C# image hWindowControl Halcon ho

       在上篇文章中已经实现了在C#中成功调用Halcon,今天来实现阈值分割,并且利用简单的封装来优化自己的阈值分割方法。

一、前期准备

创建好工程后,设计一个基本的框架UI(不会创建工程的同志以及没搭好环境的同学,可以看我上一篇),这里我用了两个按钮(button)两个标签(Label)两个文本框(Textbox)和一个窗口(HWindowControl)。

如果没有HWindowControl窗口的话,需要重新将文件拖入工具箱(具体可看上一篇文章)。

下图是两个按钮以及窗口的相关属性,可自行根据需求改变属性。

二、初步实现

下面我们开始初步实现c#中实现阈值分割。

第一步,实现读取图片的按钮功能(Button_readImage)

在UI界面,双击“Button_readImage”按钮后,可以自己跳转到对应的cs下并生成函数。

        //定义一个图片的成员变量
        private HObject ho_image;
        private void button_readImage_Click(object sender, EventArgs e)
        {
            //写入想要读取图片的路径,这里为方便演示写死了图片路径
            HOperatorSet.ReadImage(out ho_image, "C:\\Users\\86186\\Desktop\\BackgroundImage\\P0.jpg");
           HTuple width, height;
            //获得图片的宽和高
            HOperatorSet.GetImageSize(ho_image, out width, out height);
            //设置图片在窗口的显示范围,HWindowControl.HalconWindow -->控件的句柄
            HOperatorSet.SetPart(hWindowControl_First,0,0(height-1),(width-1));
            //显示
            HOperatorSet.DispObj(ho_image, hWindowControl_First.HalconWindow);
        }

写完这段代码,我们来运行,检查一下按钮功能是否能正常实现。

        当图片加载出来后,验证了图片加载功能是成功的。下面开始实现阈值分割功能,先来实现最基础的阈值分割。

        HTuple MinGray;
        HTuple MaxGray;
        private void button_threshold_Click(object sender, EventArgs e)
        {
            //设置窗口清除,这样可以防止上一次的图像遮盖
            hWindowControl_First.HalconWindow.ClearWindow();
            //设置判断语句,防止没有读取图片,就进行阈值分割的操作。
            if (ho_image == null)
            {
                button_readImage_Click(null, null);
            }
            //设置阈值分割后显示的颜色
            HOperatorSet.SetColor(hWindowControl_First.HalconWindow, "red");
            HObject Region;
            //int.Parse(string)强制字符串类型转化成int类型
            MaxGray = int.Parse(textBox_MaxGray.Text);
            MinGray = int.Parse(textBox_MinGray.Text);
            //阈值分割
            HOperatorSet.Threshold(ho_image,out Region ,MinGray,MaxGray);

            HTuple width,height;
            HOperatorSet.GetImageSize(ho_image,out width,out height);

            HOperatorSet.SetPart(hWindowControl_First.HalconWindow, 0, 0, (height - 1),(width - 1));

            HOperatorSet.DispObj(Region, hWindowControl_First.HalconWindow);
        }

来看一下,我们初步实现阈值分割的整体效果。首先,读取图片。

输入最大,最小值后点击阈值分割

测试成功!

标签:分割,HOperatorSet,阈值,C#,image,hWindowControl,Halcon,ho
From: https://blog.csdn.net/m0_68932872/article/details/141359932

相关文章

  • 题解:AT_jag2016secretspring_b 豪邸と宅配便
    思路设\(T\)为总时间。由于第一次太郎一定会花\(m\)时间到达门口,所以\(t\)要先减去\(m\)。之后太郎就有两种选择在门口等待下一个快递,时间花费为\(a_i-a_{i-1}\)。回书房,学习一会,再拿快递,时间花费为\(2\timesm\)。则最优时间花费为\(\min(2\timesm,a_i-a_{i-1}......
  • 题解:CF362A Two Semiknights Meet
    题意有两个走法为中国象棋象的棋子,棋盘上有一些坏格子,问它们是否可以在好格子相遇。思路则判断两个棋子是否相遇有两个条件是否可以在一个格子相遇。那个格子是否是好格子。先考虑条件\(1\)设第一个棋子的坐标为\(a_x\)和\(a_y\),第二个棋子的坐标为\(b_x\)和\(b_y......
  • MapStruct-plus cannot find converter from
     废话不多,直接上1错误:cannotfindconverterfrom 2描述我的情况我的项目分为2块,一块是接口,一块是实现API接口(kintech-api-bo):其中dto,req,res包含了@AutoMapper 实现(kintech-bo): 3问题当我的其他模块(kintech-crm),引用了kintech-api-bo时,调用如下语句就会报错......
  • oracle & mysql 驱动程序安装配置
    Install-PackageOracle.ManagedDataAccess-Version12.2.20230118  版本可以安装到19.18Install-PackageMySql.Data-Version8.0.32.1config文件新增内容<system.data>  <DbProviderFactories>    <removeinvariant="MySql.Data.MySqlClient"/>    &......
  • 题解:CF991D Bishwock
    思路考虑贪心。从左往右扫,找到一个就标记一个即可。但是要注意,当遇见这种情况时000000最优的方法是左右各放一个积木,共放入两块。但如果按照刚刚的方法,则有可能会是这样0X0XX0所以在一些地方有多种放法时,应该优先放置开口朝右的积木。ACCode#include<bits/stdc++.h>......
  • 洛谷P3528 [POI2011] PAT-Sticks && 数据结构之堆
    传送门:P3528[POI2011]PAT-Sticks与买桂花同载酒,终不似,少年游这是现在为止洛谷上的最优解!!翻译题目描述小约翰尼的爷爷奶奶送给他一份生日礼物。这份礼物是一盒长度和颜色各异的木棍。约翰尼想知道,在他得到的这组木棍中,是否存在三根木棍能够组成一个三边颜色各不相同的三......
  • 题解:AT_abc365_c [ABC365C] Transportation Expenses
    题意已知\[\sum_{i=1}^{n}\min(x,a_i)\lem\]问\(x\)最大为多少。思路由于答案具有单调性,所以考虑二分答案。但是有一点要注意,当\(\sum_{i=1}^{n}a_i\lem\)时,应该输出infinite。因为此时的\(x\)可以为任意一个数。ACcode#include<bits/stdc++.h>#defineintun......
  • [Paper Reading] Reconstructing Hands in 3D with Transformers
    名称ReconstructingHandsin3DwithTransformers时间:CVPR2024机构:UCBerkeley,UniversityofMichigan,NewYorkUniversityTL;DR本文提出一种使用Transformer来做HandTracking的算法名为HaMeR(HandMeshRecorvery),优势是大数据规模(利用多数据集的2D/3D标签),大模型(......
  • Android T don't abort background activity starts
    log:2024-08-2015:45:12.457581-1128ActivityTaskManagersystem_processISTARTu0{act=android.intent.action.MAINcat=[android.intent.category.LAUNCHER]flg=0x10000000pkg=acr.browser.lightningcmp=acr.browser.lightning/.Ma......
  • 粒子群优化函数--particleswarm函数的用法与讨论
    particleswarm函数是matlab自带的粒子群优化算法,其使用自适应的邻域模式搜索最优解,比我们之前自己写的代码要好得多,本章我们来讨论一下其思想与参数设置目录一、自适应的邻域模式1.全局模式与邻域模式2.全局模式的优劣3.邻域模式的优劣4.何为“自适应”二、预设参数的选取1.粒子......