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

文章目录

  • 前言
  • 相关链接
  • 项目专栏
  • 运行环境
  • 匹配图片
  • 模板匹配
    • 加载模板文件
      • 运行结果
    • 绘制十字标
  • WPF 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文件夹下面

在这里插入图片描述
在这里插入图片描述

匹配代码

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

运行结果

在这里插入图片描述

绘制十字标

            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来添加或者删除图案

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

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

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

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

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

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

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

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

            });

事件代码


        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算子上面去查找一下,逻辑是一样的

绘制和生成的区别

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

// 绘制矩形
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分离来清空
使用场景给图像打印信息添加可拖动的选区

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

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

相关文章

海康visionmaster-渲染结果:控件颜色:控件颜色修改的方法

描述 环境:VM4.0.0 VS2015 及以上 现象:简易修改 VM 控件的颜色? 解答 对二次开发中嵌入控件的颜色进行修改,具体代码如下: C# string colorinfo “ColorStyle3”; AppColorService.CurColorDefine colorinfo; “Co…

全志R128 DSP开发工具安装教程

资料准备 要编译和仿真DSP,需要以下资料: DSP 核 SDK,SDK 需要包含DSP 编译源码。Cadence Xtensa 的 Windows IDE 工具 (Xplorer‑8.0.13 版本), Windows 版本 DSP 的 package 包。Cadence Xtensa 的 License,用于服…

linux安装java8

1、下载java 根据自己系统的位数下载 查看系统位数命令:getconf LONG_BIT 下载地址 https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html 2、解压、移动 将下载的文件上传到linux系统中并解压 tar -zxvf jdk-8u333-linux…

人是需要被肯定和认可的,赞美也是一种动力

前几天转发了一些网上的文章,突然有了10个关注我的人,赞美数和收藏量也上去了一些。 这是一种很意外的惊喜。 看了一下主题是: 1,如何将.NET8创建的控制台程序部署成WINDOWS服务。 2,.NET进阶篇06-async异步、thread多线程 3,易语言启动线程传…

最优轨迹生成(四)—— 带约束轨迹优化

本系列文章是学习深蓝学院-移动机器人运动规划课程第五章最优轨迹生成 过程中所记录的笔记,本系列文章共包含四篇文章,依次介绍了微分平坦特性、无约束BVP轨迹优化、无约束BIVP轨迹优、 带约束轨迹优化等内容 本系列文章链接如下: 最优轨迹生…

【ChatGPT 默认强化学习策略】PPO 近端策略优化算法

PPO 近端策略优化算法 PPO 概率比率裁剪 演员-评论家算法演员-评论家算法:多智能体强化学习核心框架概率比率裁剪:逐步进行变化的方法PPO 目标函数的设计重要性采样KL散度 PPO 概率比率裁剪 演员-评论家算法 论文链接:https://arxiv.org…

12. 整数转罗马数字

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 …

Filezilla使用

服务端 点击安装包 点击我接受 点击下一步 点击下一步 点击下一步 点击安装即可 配置用户组,点击编辑,出现组点击 点击添加,点击确定即可 配置用户,点击编辑点击用户 点击添加,设置用户名&#xff…

打印9*9乘法口诀

一. main函数实现 1.参数n表示乘法口诀表总共有多少行 2.设定两个循环 外层循环控制总共有多少行 内层循环控制每行有多少个表达式以及表达式中的内容 #include<stdio.h> int main() {int n 0;scanf("%d", &n);for (int i 1; i < n; …

丢失VCRUNTIME140_1.dll怎么办,多种dll问题解决方法分享

丢失VCRUNTIME140_1.dll是许多计算机用户经常遇到的问题之一。VCRUNTIME140_1.dll是一个动态链接库文件&#xff0c;它是Visual C Redistributable Package的一部分。Visual C Redistributable Package是微软为了支持运行使用Visual C编写的软件而提供的一个可再发行组件包。当…

Django 学习教程- Hello world入门案例

系列 Django学习教程-介绍与安装 欢迎来到第Djagno学习教程第二章Hello World 入门案例。 在本教程中&#xff0c;我将引导您完成django的Hello World入门案例。 让我们开始吧&#xff01; 版本 Django 5.0Python 3.10 创建项目 安装 Django 之后&#xff0c;您现在应该…

RK3568平台开发系列讲解(Linux系统篇)PWM系统编程

🚀返回专栏总目录 文章目录 一、什么是PWM二、PWM相关节点三、PWM应用编程沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍 PWM 的系统编程。 一、什么是PWM PWM,即脉冲宽度调制(Pulse Width Modulation)

CSS 纵向底部往上动画

<template><div class"container" mouseenter"startAnimation" mouseleave"stopAnimation"><!-- 旋方块 --><div class"box" :class"{ scale-up-ver-bottom: isAnimating }"><!-- 元素内容 --&g…

线性代数基础知识

计算机视觉一些算法中常会用到线性代数的一些知识&#xff0c;为了便于理解和快速回忆&#xff0c;博主这边对常用的一些知识点做下整理&#xff0c;主要来源于如下这本书籍。 1. 矩阵不仅仅是数字排列而已&#xff0c;不然也不会有那么大精力研究它。其可以表示一种映射 关于…

lenovo联想拯救者8.8英寸掌上游戏机Legion Go 8APU1(83E1)原装出厂Windows11预装系统

链接&#xff1a;https://pan.baidu.com/s/1d586XWXcAWVxlLyV2Oku7Q?pwdd74t 提取码&#xff1a;d74t 系统自带所有驱动、出厂主题壁纸、Office办公软件、联想电脑管家等预装程序 所需要工具&#xff1a;16G或以上的U盘 文件格式&#xff1a;ISO 文件大小&#xff1a;…

Xgboost分类模型的完整示例

往期精彩推荐 数据科学知识库机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归PySpark大数据处理详细教程 定义问题 UCI的蘑菇数据集的主要目的是为了分类任务&#xff0c;特别是区分蘑菇是可食用还是有毒。这个数据集包含了蘑菇的各种特征&#xff0c;如…

vue3基础知识一,安装及使用

一、安装vue3 需要安装node&#xff0c;然后在项目所在目录命令行执行以下代码。 npm create vuelatest 回车后需要配置以下内容。 二、安装所需的依赖包并运行 cd到项目目录&#xff0c;执行以下代码安装依赖包 npm i 运行项目 npm run dev 打开浏览器查看结果 ok&#…

Linux系统安装DockerDocker-Compose

1、Docker安装 下载Docker依赖的组件 yum -y install yum-utils device-mapper-persistent-data lvm2 设置下载Docker服务的镜像源&#xff0c;设置为阿里云 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 安装Docker服务 …

LTPI协议的理解——4、LTPI链路初始化以及运行

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 LTPI协议的理解——4、LTPI链路初始化以及运行 前言状态图Link TrainingLink DetectLink SpeedLink Training Example Link ConfigurationAdvertiseConfigure & AcceptLi…

Git:常用命令(二)

查看提交历史 1 git log 撤消操作 任何时候&#xff0c;你都有可能需要撤消刚才所做的某些操作。接下来&#xff0c;我们会介绍一些基本的撤消操作相关的命令。请注意&#xff0c;有些操作并不总是可以撤消的&#xff0c;所以请务必谨慎小心&#xff0c;一旦失误&#xff0c…