做公司网站需要几个域名,万网的网站建设好吗,网站存在的缺陷,嘉兴app开发公司文章目录 前言相关链接项目专栏运行环境匹配图片模板匹配加载模板文件运行结果 绘制十字标 WPF HS组件绘制图像绘制和生成的区别 前言
为了更好地去学习WPFHalcon#xff0c;我决定去报个班学一下。原因无非是想换个工作。相关的教学视频来源于下方的Up主的提供的教程。这里只… 文章目录 前言相关链接项目专栏运行环境匹配图片模板匹配加载模板文件运行结果 绘制十字标 WPF HS组件绘制图像绘制和生成的区别 前言
为了更好地去学习WPFHalcon我决定去报个班学一下。原因无非是想换个工作。相关的教学视频来源于下方的Up主的提供的教程。这里只做笔记分享想要源码或者教学视频可以和他联系一下。
相关链接 微软系列技术教程 WPF 年度公益课程 Halcon开发 CSDN博客专栏 个人学习的Gitee 项目地址仓库 项目专栏 WPFHalcon实战项目 运行环境
.net core 8.0visual studio 2022halcon HDevelop 20.11windows 11
匹配图片 模板匹配
加载模板文件
我们加载前面生成的模板文件 WPFHalcon 培训项目实战(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分离来清空使用场景给图像打印信息添加可拖动的选区