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

       在上篇文章中已经实现了在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);
        }

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

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

测试成功!

  • 14
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值