当前位置: 首页 > news >正文

Halcon例程代码解读:安全环检测(附源码|图像下载链接)

安全环检测核心思路与代码详解

项目目标

本项目的目标是检测图像中的安全环位置和方向。通过形状匹配技术,从一张模型图像中提取安全环的特征,并在后续图像中识别多个实例,完成检测和方向标定。


实现思路

安全环检测分为以下核心步骤:

  1. 模型图像加载与处理: 读取包含安全环的模型图像,并定义感兴趣区域 (ROI),以减少背景干扰。
  2. 形状模型创建: 基于感兴趣区域提取特征,训练通用形状模型(Generic Shape Model)。
  3. 目标匹配检测: 在待检测图像中搜索安全环,输出位置、方向和检测结果。
  4. 结果可视化: 通过绘制轮廓和方向箭头,直观展示安全环的位置和方向信息。

代码讲解

以下是完整代码的逐步解析,重点放在每个步骤的核心功能和逻辑。


1. 初始化

* 关闭窗口更新以优化性能
dev_update_window ('off')* 加载模型图像
read_image (ModelImage, 'image/rings_01')* 获取图像尺寸
get_image_size (ModelImage, Width, Height)* 打开窗口并设置显示区域
dev_close_window ()
dev_open_window (0, 0, Width, Height, 'white', WindowHandle)
dev_set_part (0, 0, Height - 1, Width - 1)* 显示模型图像
dev_display (ModelImage)
  • 核心功能:
    • 关闭窗口更新 (dev_update_window ('off')) 以提高运行性能。
    • 读取模型图像并获取图像尺寸,为后续显示做准备。
    • 打开一个适配图像尺寸的显示窗口。

2. 定义感兴趣区域 (ROI)

* 设置安全环的ROI
Row := 251
Column := 196
Radius := 103* 创建圆形区域作为ROI
gen_circle (ModelROI, Row, Column, Radius)* 显示ROI
dev_display (ModelROI)
  • 核心功能:
    • 使用 gen_circle 函数定义圆形区域,圈定包含安全环的区域。
    • 通过 ROI 减少背景干扰,确保模型训练的准确性。

3. 检查并创建形状模型

检查模型区域
* 裁剪图像,仅保留ROI部分
reduce_domain (ModelImage, ModelROI, ImageROI)* 检查ROI的形状特征
inspect_shape_model (ImageROI, ShapeModelImage, ShapeModelRegion, 1, 30)* 显示检查结果
dev_clear_window ()
dev_display (ShapeModelRegion)
  • 核心功能:
    • 使用 reduce_domain 裁剪图像,只保留 ROI。
    • 调用 inspect_shape_model 检查模型区域的形状特征,确保模型质量。
创建形状模型

在这里插入图片描述

* 创建并训练通用形状模型
create_generic_shape_model (ModelID)
set_generic_shape_model_param (ModelID, 'metric', 'ignore_global_polarity')
train_generic_shape_model (ImageROI, ModelID)* 提取模型轮廓
get_generic_shape_model_object (ShapeModel, ModelID, 'contours')

在这里插入图片描述

  • 核心功能:
    • 调用 create_generic_shape_model 创建模型,随后通过 train_generic_shape_model 基于 ROI 图像训练模型。
    • 设置模型参数 ignore_global_polarity,忽略极性变化,增强鲁棒性。

4. 目标匹配与检测

* 设置形状匹配参数
set_generic_shape_model_param (ModelID, 'max_overlap', 0.55)
set_generic_shape_model_param (ModelID, 'min_score', 0.4)* 遍历待检测图像
for i := 1 to 7 by 1read_image (SearchImage, 'image/rings_' + (i + 1)$'02')dev_display (SearchImage)* 进行形状匹配find_generic_shape_model (SearchImage, ModelID, MatchResultID, NumMatchResult)* 如果检测到物体if (NumMatchResult > 0)set_tposition (WindowHandle, 20, 24)write_string (WindowHandle, '检测到目标数量:'+NumMatchResult)* 遍历所有检测结果for j := 0 to NumMatchResult - 1 by 1* 获取目标轮廓get_generic_shape_model_result_object (Objects, MatchResultID, j, 'contours')dev_set_color ('cyan')dev_display (Objects)* 获取位置和方向信息get_generic_shape_model_result (MatchResultID, j, 'row', Row)get_generic_shape_model_result (MatchResultID, j, 'column', Column)get_generic_shape_model_result (MatchResultID, j, 'hom_mat_2d', HomMat2D)* 计算方向箭头终点affine_trans_pixel (HomMat2D, -120, 0, RowArrowHead, ColumnArrowHead)dev_set_color ('blue')disp_arrow (WindowHandle, Row, Column, RowArrowHead, ColumnArrowHead, 2)endforelse* 未检测到目标set_tposition (WindowHandle, 20, 20)write_string (WindowHandle, '未检测到物体!')endif
endfor
  • 核心功能:
    1. 目标匹配:
      • 使用 find_generic_shape_model 在每张图像中搜索目标。
      • 匹配结果包括目标数量、位置(行、列坐标)和方向(仿射矩阵)。
    2. 显示检测结果:
      • 高亮显示目标轮廓,并绘制箭头标注方向。
      • 若检测不到目标,则显示“未检测到物体”的提示。
        -在这里插入图片描述
        在这里插入图片描述

在这里插入图片描述


5. 清理资源与结束程序

* 恢复窗口更新
dev_update_window ('on')* 清理形状模型
clear_shape_model (ModelID)
  • 核心功能:
    • 恢复窗口更新。
    • 释放形状模型资源,避免内存占用。

项目核心思路总结

  1. 模型训练:
    使用感兴趣区域提取安全环的形状特征,生成通用形状模型。

  2. 多图像匹配:
    遍历多张待检测图像,利用形状模型进行目标匹配,输出目标位置和方向信息。

  3. 结果可视化:
    通过高亮轮廓和绘制箭头,直观展示安全环的位置与方向。


适用场景

该项目适用于以下应用场景:

  • 工业生产中的零件检测: 如汽车轮毂、机械零件中的环状目标检测。
  • 视觉质量控制: 检测物体位置和方向是否符合预期。

代码与资源

通过网盘分享的文件:安全环
链接: https://pan.baidu.com/s/1gAHHtwL53Sow00jUHD_Z2g?pwd=jkcf 提取码: jkcf

相关文章:

Halcon例程代码解读:安全环检测(附源码|图像下载链接)

安全环检测核心思路与代码详解 项目目标 本项目的目标是检测图像中的安全环位置和方向。通过形状匹配技术,从一张模型图像中提取安全环的特征,并在后续图像中识别多个实例,完成检测和方向标定。 实现思路 安全环检测分为以下核心步骤&…...

Selenium 全面指南

Selenium 是一个强大的 Web 自动化工具,支持多种浏览器和语言绑定。 1. Selenium 的基本概念 WebDriver:Selenium 提供的核心接口,用于控制浏览器操作。显式等待:等待特定条件满足后再执行操作。隐式等待:全局设置一个…...

#error: WinSock.h has already been included解决方案

原因&#xff1a; 在工程中使用了 Boot 库之后&#xff0c;使用了socket、tcp 相关的头文件&#xff0c;在其他地方还是包括了头文件<windows.h>&#xff0c;该头文件内包含了<winsock.h>。导致遇到报错问题&#xff1a;WinSock.h has already been included 解决…...

2.Couchbase 的增量查询优化

在 Couchbase 中实现增量查询的优化是关键&#xff0c;尤其当数据量庞大时。通过合适的策略&#xff0c;可以显著提高增量查询的效率&#xff0c;确保系统在处理实时数据时的响应速度和性能。下面是一些针对 Couchbase 增量查询的优化策略。 1. 使用索引优化查询 为了提升增量…...

汽车IVI中控开发入门及进阶(46):FFmpeg

概述: FFmpeg 是领先的多媒体框架,能够解码、编码、 转码、复用、解复用、流、过滤和播放 几乎所有人类和机器创建的东西。它支持最模糊的古老格式,直到最前沿。无论它们是由某个标准委员会、社区还是公司设计的。它还具有高度的可移植性:FFmpeg 在各种构建环境、机器架构…...

Spring Boot 中的 @Scheduled 定时任务以及开关控制

Scheduled注解是Spring框架&#xff08;包括Spring Boot&#xff09;中用于实现定时任务的一种方式。以下是对Scheduled注解的详细解析&#xff1a; 一、基本概念 Scheduled注解允许开发者在Spring容器中定义定时任务。通过简单地在一个方法上添加Scheduled注解&#xff0c;S…...

服务器证书原理

CA&#xff08;Certificate Authority&#xff09;证书是由 证书颁发机构&#xff08;CA&#xff09;本身签名的。具体来说&#xff0c;这取决于 CA 的类型和其在信任链中的位置&#xff1a; 1. 自签名证书 根 CA 证书 是信任链的起点&#xff0c;由 CA 自己签名。它们是信任链…...

重温设计模式--代理、中介者、适配器模式的异同

文章目录 1、相同点2、不同点 1、相同点 目的都是为了更好地处理对象之间的关系&#xff1a;这三种模式都是在软件设计中用于处理对象之间的关联和交互&#xff0c;以达到优化系统结构、增强可维护性等目的。它们都在一定程度上隐藏了对象之间的某些细节或者复杂性&#xff0c…...

2024第十六届蓝桥杯模拟赛(第二期)-Python

# 2024第十六届蓝桥杯模拟赛&#xff08;第二期&#xff09;-Python题解 # 自己改注释# -----------------------1------------------------ # def prime(x): # if x < 2: # return 0 # for i in range(2, int(x ** 0.5) 1): # if x % i 0: # …...

分布式系统中的防抖策略一致性与性能优化

目录 引言分布式系统的挑战防抖策略简介确保多实例间一致性的方法 幂等操作TTL缓存 分布式一致性事件总线或消息队列异步任务调度器客户端或API网关层面的防抖一致性哈希与分区限流和熔断机制 避免锁竞争导致的性能瓶颈Java示例代码结论 引言 在现代软件架构中&#xff0c;…...

项目代码第6讲:UpdownController.cs;理解 工艺/工序 流程、机台信息;前端的“历史 警报/工艺 记录”

一、UpdownController.cs 1、前端传入 当用户在下图的“记录查询”中的 两个界面选项 中,点击“导出”功能时,向后端发起请求,请求服务器下载文件的权限 【权限是在Program.cs中检测的,这个控制器里只需要进行“谁在哪个接口下载了文件”的日志记录】 【导出:是用户把…...

【计算机视觉基础CV-图像分类】03-深度学习图像分类实战:鲜花数据集加载与预处理详解

本文将深入介绍鲜花分类数据集的加载与处理方式&#xff0c;同时详细解释代码的每一步骤并给出更丰富的实践建议和拓展思路。以实用为导向&#xff0c;为读者提供从数据组织、预处理、加载到可视化展示的完整过程&#xff0c;并为后续模型训练打下基础。 前言 在计算机视觉的深…...

大模型应用技术系列(一):大模型应用整体技术栈浅析

RAG相关的技术学习暂时告一段落了,接下来尝试探索新的学习方向。这就引入一个问题:接下来该做什么?为了能进一步推进,我需要有一个整体的视角,从更上层来看整个技术栈,从而确定接下来感兴趣的方向。本文主要探索从更上层的视角来看构建大模型的技术栈,从而进一步确定研究…...

绿色环保木塑复合材料自动化生产线设计书

《绿色环保木塑复合材料自动化生产线设计书》 一、项目概述 随着全球对环境保护和可持续发展的日益重视,绿色环保材料的研发与生产成为了热门领域。木塑复合材料作为一种新型的绿色环保材料,它将木材纤维与塑料通过特定工艺复合而成,兼具木材与塑料的双重特性,具有防水、…...

Sourcegraph 概述

Sourcegraph 报告 Sourcegraph 是一款强大的代码搜索和智能导航工具&#xff0c;专为大型代码库、分布式系统和跨多个仓库的开发环境设计。它能显著提高开发者对复杂系统的理解和维护效率&#xff0c;帮助团队在庞大的代码库中快速找到关键信息。本文将详细讲解 Sourcegraph 的…...

c 保存 csv格式的文件

在C语言中保存数据为CSV&#xff08;逗号分隔值&#xff09;格式的文件&#xff0c;你可以使用标准I/O库函数&#xff0c;如fprintf&#xff0c;来将数据写入文件&#xff0c;并确保每个字段之间用逗号分隔。以下是一个简单的示例&#xff0c;说明如何在C语言中创建一个CSV文件…...

C语言扫雷游戏教学(有图形界面)(提供源码+实验报告)(计时+排行榜+难度选择+登录注册+背景音乐)(涉及easyX库)

前言&#xff1a; 本篇文章篇幅较长&#xff0c;请根据自己的需求在目录上跳转对应内容哦&#xff01;源码及实验报告的获取在文章的后面哦&#xff01;本人代码水平不佳&#xff0c;希望本文章和项目能带给大家帮助&#xff01; 目录 前言&#xff1a; 一.成果预览&#x…...

第五节:GLM-4v-9b模型model加载源码解读(模型相关参数方法解读)

文章目录 前言一、GLM-4v-9b模型model加载源码解读1、GLM-4v-9b模型model加载主函数源码2、GLM-4v-9b模型model加载源码源码解读3、GLM-4v-9b自定义模型类源码解读 二、基于GLM-4v-9b模型获取模型输入参数等内容源码解读(from_pretrained-->huggingface)1、from_pretrained函…...

面试经验分享 | 北京渗透测试岗位

更多大厂面试经验的视频经验分享看主页 目录&#xff1a; 所面试的公司&#xff1a;安全大厂 所在城市&#xff1a;北京 面试职位&#xff1a;渗透测试工程师 面试方式&#xff1a;腾讯会议线上面试线下面试 面试过程&#xff1a; 面试官的问题&#xff1a; 1、说一下XSS有哪…...

unity Toggle制作滑动开关

先上效果图 重点是这个Graphic要清空,不然显示不能直接切换,会消失 using DG.Tweening; using UnityEngine; using UnityEngine.UI;public class SwitchToggle : MonoBehaviour {public RectTransform handleRect;public float duration 0.5f;private Vector2 handlePos;To…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用

一、方案背景​ 在现代生产与生活场景中&#xff0c;如工厂高危作业区、医院手术室、公共场景等&#xff0c;人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式&#xff0c;存在效率低、覆盖面不足、判断主观性强等问题&#xff0c;难以满足对人员打手机行为精…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist

现象&#xff1a; android studio报错&#xff1a; [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决&#xff1a; 不要动CMakeLists.…...