wordpress启用主题网站出错,郑州网站优化,郑州专业网站设计,建站网站是什么文章目录 前言相关链接项目专栏运行环境匹配图片WPF导出匹配模板如何了解Halcon和C#代码的对应关系逻辑分析#xff1a;添加截取ROI功能基类矩形圆形 生成导出模板运行结果#xff1a;可能的报错你的文件路径不存在你选择的区域的内容有效信息过少 前言
为了更好地去学习WPF… 文章目录 前言相关链接项目专栏运行环境匹配图片WPF导出匹配模板如何了解Halcon和C#代码的对应关系逻辑分析添加截取ROI功能基类矩形圆形 生成导出模板运行结果可能的报错你的文件路径不存在你选择的区域的内容有效信息过少 前言
为了更好地去学习WPFHalcon我决定去报个班学一下。原因无非是想换个工作。相关的教学视频来源于下方的Up主的提供的教程。这里只做笔记分享想要源码或者教学视频可以和他联系一下。
相关链接 微软系列技术教程 WPF 年度公益课程 Halcon开发 CSDN博客专栏 个人学习的Gitee 项目地址仓库 项目专栏 WPFHalcon实战项目 运行环境
.net core 8.0visual studio 2022halcon HDevelop 20.11windows 11
匹配图片 WPF导出匹配模板
如何了解Halcon和C#代码的对应关系
我之前的博客上面说过Halcon是可以进行C# 文档导出的功能的 如果我们对其添加注释其导出的文件也有添加对应的注释的功能。 所以我们只需要将对应的代码超过了进行对应的转化即可。
逻辑分析 #mermaid-svg-LceIEQTJYpKwYW1q {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-LceIEQTJYpKwYW1q .error-icon{fill:#552222;}#mermaid-svg-LceIEQTJYpKwYW1q .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-LceIEQTJYpKwYW1q .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-LceIEQTJYpKwYW1q .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-LceIEQTJYpKwYW1q .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-LceIEQTJYpKwYW1q .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-LceIEQTJYpKwYW1q .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-LceIEQTJYpKwYW1q .marker{fill:#333333;stroke:#333333;}#mermaid-svg-LceIEQTJYpKwYW1q .marker.cross{stroke:#333333;}#mermaid-svg-LceIEQTJYpKwYW1q svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-LceIEQTJYpKwYW1q .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-LceIEQTJYpKwYW1q .cluster-label text{fill:#333;}#mermaid-svg-LceIEQTJYpKwYW1q .cluster-label span{color:#333;}#mermaid-svg-LceIEQTJYpKwYW1q .label text,#mermaid-svg-LceIEQTJYpKwYW1q span{fill:#333;color:#333;}#mermaid-svg-LceIEQTJYpKwYW1q .node rect,#mermaid-svg-LceIEQTJYpKwYW1q .node circle,#mermaid-svg-LceIEQTJYpKwYW1q .node ellipse,#mermaid-svg-LceIEQTJYpKwYW1q .node polygon,#mermaid-svg-LceIEQTJYpKwYW1q .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-LceIEQTJYpKwYW1q .node .label{text-align:center;}#mermaid-svg-LceIEQTJYpKwYW1q .node.clickable{cursor:pointer;}#mermaid-svg-LceIEQTJYpKwYW1q .arrowheadPath{fill:#333333;}#mermaid-svg-LceIEQTJYpKwYW1q .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-LceIEQTJYpKwYW1q .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-LceIEQTJYpKwYW1q .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-LceIEQTJYpKwYW1q .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-LceIEQTJYpKwYW1q .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-LceIEQTJYpKwYW1q .cluster text{fill:#333;}#mermaid-svg-LceIEQTJYpKwYW1q .cluster span{color:#333;}#mermaid-svg-LceIEQTJYpKwYW1q div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-LceIEQTJYpKwYW1q :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 读取图片 截取ROI 生成模板 导出模板 添加截取ROI功能
我们之前的抽象封装还缺少截取ROI的功能这里我们将ROI截取功能添加上去。
截取ROI对应代码 //截取ROIhv_Row1.Dispose();hv_Column1.Dispose();hv_Row2.Dispose();hv_Column2.Dispose();HOperatorSet.DrawRectangle1(hv_WindowHandle, out hv_Row1, out hv_Column1, out hv_Row2, out hv_Column2);ho_Rectangle.Dispose();HOperatorSet.GenRectangle1(out ho_Rectangle, hv_Row1, hv_Column1, hv_Row2, hv_Column2);ho_ImageReduced.Dispose();HOperatorSet.ReduceDomain(ho_Image, ho_Rectangle, out ho_ImageReduced);基类
using HalconDotNet;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace HalconExtension.Models
{public abstract class HObjBase{/// summary/// HS组件主题/// /summarypublic HSmartWindowControlWPF WindowControlWPF { get; set; }/// summary/// 资源路径/// /summarypublic string ResourcesPath { get AppDomain.CurrentDomain.BaseDirectory Resources; }/// summary/// 导出路径/// /summarypublic string OutputPath{get{var path AppDomain.CurrentDomain.BaseDirectory Output;//如果不存在就创建if (!Directory.Exists(path)){Directory.CreateDirectory(path);}return path;}}public HDrawingObject DrawingObject { get; set; }public HImage Image { get; set; }public HObject ROI new HObject();public HObjBase(HSmartWindowControlWPF windowControlWPF, HImage image){WindowControlWPF windowControlWPF;Image image;}......其它代码/// summary/// 截取图片/// /summarypublic abstract HObject Reduce();}
}
矩形
using HalconDotNet;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace HalconExtension.Models
{/// summary/// 矩形封装/// /summarypublic class HRectangleObj : HObjBase{public HTuple HType { get; private set; }public HTuple Row1 { get; private set; }public HTuple Row2 { get; private set; }public HTuple Column1 { get; private set; }public HTuple Column2 { get; private set; }/// summary/// 刷新回调/// /summarypublic ActionHRectangleObj RefleshCallBack { get; set; }/// summary/// 初始化构造函数/// /summary/// param namewindowControlWPF/param/// param namerow1/param/// param namecolumn1/param/// param namerow2/param/// param namecolumn2/parampublic HRectangleObj(HSmartWindowControlWPF windowControlWPF,HImage hImage, HTuple row1, HTuple column1, HTuple row2, HTuple column2) : base(windowControlWPF, hImage){//WindowControlWPF windowControlWPF;Row1 row1;Column1 column1;Row2 row2;Column2 column2;DrawingObject HDrawingObject.CreateDrawingObject(HDrawingObject.HDrawingObjectType.RECTANGLE1, Row1, Column1, Row2, Column2);//添加更新事件DrawingObject.OnDrag(Reflash);DrawingObject.OnResize(Reflash);}/// summary/// 默认构造函数/// /summary/// param namewindowControl/parampublic HRectangleObj(HSmartWindowControlWPF windowControl,HImage hImage) : this(windowControl,hImage,100,200,300,400){}......其它代码/// summary/// 截取图片/// /summarypublic override HObject Reduce(){HObject res new HObject();HOperatorSet.GenRectangle1(out ROI, Row1, Column1, Row2, Column2);HOperatorSet.ReduceDomain(Image, ROI, out res);return res;}}
}
圆形
using HalconDotNet;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace HalconExtension.Models
{public class HCircleObj : HObjBase{public HTuple Row { get; set; }public HTuple Column { get; set; }public HTuple Radius { get; set; }public HTuple HType { get; private set; }/// summary/// 刷新回调/// /summarypublic ActionHCircleObj RefleshCallBack { get; set; }public HCircleObj(HSmartWindowControlWPF windowControlWPF,HImage hImage, HTuple row, HTuple col, HTuple radius):base(windowControlWPF,hImage){Row row;Column col;Radius radius;DrawingObject HDrawingObject.CreateDrawingObject(HDrawingObject.HDrawingObjectType.CIRCLE, Row, Column, Radius);//添加更新事件DrawingObject.OnDrag(Reflash);DrawingObject.OnResize(Reflash);}public HCircleObj(HSmartWindowControlWPF windowControlWPF,HImage hImage) : this(windowControlWPF,hImage,64,64,64){}......其它代码/// summary/// 截取图片/// /summarypublic override HObject Reduce(){HObject res new HObject();HOperatorSet.GenCircle(out ROI, Row, Column,Radius);HOperatorSet.ReduceDomain(Image, ROI, out res);return res;}}
}
生成导出模板 /// summary/// 生成匹配模板/// /summaryprivate void InitTemplate(){HTuple modelId new HTuple();var ho_ImageReduced RectangleObj.Reduce();HOperatorSet.CreateShapeModel(ho_ImageReduced, auto, -0.39, 0.79, auto, auto,use_polarity, auto, auto, out modelId);//导出匹配模板HOperatorSet.WriteShapeModel(modelId, RectangleObj.OutputPath/output.shm);MsgHelper.Success($生成模板成功路径为:{RectangleObj.OutputPath /output.shm});}运行结果 可能的报错
你的文件路径不存在
Halcon组件无法自动生成文件路径如果保存的文件夹不存在会抛出异常
你选择的区域的内容有效信息过少