WPF+Halcon 培训项目实战(10):HS组件绘制图案

文章目录

前言

为了更好地去学习WPF+Halcon,我决定去报个班学一下。原因无非是想换个工作。相关的教学视频来源于下方的Up主的提供的教程。这里只做笔记分享,想要源码或者教学视频可以和他联系一下。

相关链接

微软系列技术教程 WPF 年度公益课程
Halcon开发 CSDN博客专栏
个人学习的Gitee 项目地址仓库

项目专栏

WPF+Halcon实战项目

运行环境

  • .net core 8.0
  • visual studio 2022
  • halcon HDevelop 20.11
  • windows 11

匹配图片

模板匹配

加载模板文件

我们加载前面生成的模板文件

WPF+Halcon 培训项目实战(7):目标匹配助手

将其放到我们的Resource文件夹下面


匹配代码

csharp 复制代码
LocateBtn = new RelayCommand(() =>
{
    HTuple hv_Row = new HTuple(), hv_Column = new HTuple();
    HTuple hv_Angle = new HTuple(), hv_Score = new HTuple();
    HOperatorSet.ReadShapeModel("Resources/output.shm",out template_model);
    MsgHelper.Info("模板匹配文件加载成功!");
    HOperatorSet.FindShapeModel(hImage, template_model, -0.39, 0.79, 0.5, 1,0.5, "least_squares", 0, 0.9, out hv_Row, out hv_Column, out hv_Angle, out hv_Score);

    //输出匹配结果
    MsgHelper.Success($"分数:{hv_Score},Row坐标:{hv_Row},Col坐标:{hv_Column},角度:{hv_Angle}");
});

运行结果

绘制十字标

csharp 复制代码
            LocateBtn = new RelayCommand(() =>
            {
                HTuple hv_Row = new HTuple(), hv_Column = new HTuple();
                HTuple hv_Angle = new HTuple(), hv_Score = new HTuple();
                HOperatorSet.ReadShapeModel("Resources/output.shm",out template_model);
                MsgHelper.Info("模板匹配文件加载成功!");
                HOperatorSet.FindShapeModel(hImage, template_model, -0.39, 0.79, 0.5, 1,0.5, "least_squares", 0, 0.9, out hv_Row, out hv_Column, out hv_Angle, out hv_Score);

                //输出匹配结果
                MsgHelper.Success($"分数:{hv_Score},Row坐标:{hv_Row},Col坐标:{hv_Column},角度:{hv_Angle}");

                //将笔刷颜色设置为红色
                HOperatorSet.SetColor(halconWindow.HalconWindow,"red");
                
                //在HS控件上面绘制十字标
                HOperatorSet.DispCross(halconWindow.HalconWindow, hv_Row, hv_Column,30, hv_Angle);
            });

WPF HS组件绘制图像

HS组件可以使用Attach和Detach来添加或者删除图案

csharp 复制代码
                // 显示绘制图案
                HalconWindow.HalconWindow.AttachDrawingObjectToWindow(rect);
                // 去除绘制图案
                HalconWindow.HalconWindow.DetachDrawingObjectFromWindow(rect);

Halcon (3):窗体常用语法使用

HS所有的代码都可以在Halcon源码中找到对应的方法

绘制的图案类型一般就以下几种,右边是对应的halcon算子:

  • 矩形:disp_rectangle1
  • 圆形:disp_circle
  • 十字标:disp_cross
  • 箭头:disp_arrow
  • 文本:disp_message

由于代码重复度太高,所以我们这里就直接写主要代码了

初始化代码,我们需要在ReadImg的时候就将笔刷设置为红色,图像类型设置为空心

csharp 复制代码
            ReadImgBtn = new RelayCommand(() =>
            {
                try
                {
                    MsgHelper.Info("读取图片");
                    hImage.ReadImage("Resources/1.png");

                    HalconWindow.HalconWindow.DispObj(hImage);
                    //读取后将图片居中
                    HalconWindow.SetFullImagePart();
                    //读取后将图片完全拉伸充满整个屏幕
                    //HalconWindow.SetFullImagePart(Image);

                    //将笔刷颜色设置为红色
                    HOperatorSet.SetColor(HalconWindow.HalconWindow, "red");
                    //将图像设置为无填充
                    HOperatorSet.SetDraw(HalconWindow.HalconWindow, "margin");

                }
                catch (Exception ex)
                {

                    MsgHelper.Error("HS组件加载图片失败!:" + ex.Message);
                }

            });

事件代码

csharp 复制代码
        private void DrawRectangle()
        {

            HOperatorSet.DispRectangle1(HalconWindow.HalconWindow, 100, 200, 300, 400);
        }

        private void DrawArrow()
        {

            HOperatorSet.DispArrow(HalconWindow.HalconWindow, 20, 20, 130, 130, 10);
        }

        private void DrawCircle()
        {
            HOperatorSet.DispCircle(HalconWindow.HalconWindow, 64, 64, 64);

        }

        private void DrawText()
        {

            HOperatorSet.DispText(HalconWindow.HalconWindow, "打印消息", "window", 12, 12, "black", null, null);

        }

        private void DrawCross()
        {
            HOperatorSet.DispCross(HalconWindow.HalconWindow, 20, 20, 30, 0);

        }

具体的参数有什么意思可以自己去Halcon算子上面去查找一下,逻辑是一样的

绘制和生成的区别

拿绘制和生成矩形来做区别:

c 复制代码
// 绘制矩形
HOperatorSet.DispRectangle1(HalconWindow.HalconWindow, 100, 200, 300, 400);

// 生成矩形
var rect = HDrawingObject.CreateDrawingObject(HDrawingObject.HDrawingObjectType.RECTANGLE1, 100, 200, 300, 400);
// 显示绘制图案
HalconWindow.HalconWindow.AttachDrawingObjectToWindow(rect);
绘制 生成
能否修改 不能,画上去就固定了 能,可以进行拖拽和缩放,还能绑定事件回调
如何添加 使用Disp函数添加 先要实例化一共HDrawingObject对象,使用Attach方法附加到窗口上才可以
如何清空 使用ReadImg重新读取一遍图像来清空 使用Detach分离来清空
使用场景 给图像打印信息 添加可拖动的选区
相关推荐
I'mSQL12 小时前
WPF资源字典合并报错
wpf
one99618 小时前
WPF应用程序中的异常处理
c#·.net·wpf
ccut 第一混1 天前
c# 调用basler 相机
c#·halcon·basler
疾风铸境1 天前
qt+halcon开发相机拍照软件步骤
数码相机·qt·halcon·拍照
somethingGoWay2 天前
wpf .netcore 导出docx文件
wpf·.netcore
somethingGoWay2 天前
wpf .netcore 导出pdf文件
pdf·wpf·.netcore
self_myth3 天前
[特殊字符] 深入理解操作系统核心特性:从并发到分布式,从单核到多核的全面解析
windows·macos·wpf·harmonyos
c#上位机3 天前
wpf之TextBlock
c#·wpf
玉面小君4 天前
从 WPF 到 Avalonia 的迁移系列实战篇6:ControlTheme 和 Style区别
c#·wpf·avalonia
c#上位机4 天前
wpf之Border
c#·wpf