[机器视觉]halcon应用实例 边缘检测

news2025/2/26 5:59:23

        一个学习找边的实例

边缘检测的步骤图解

步骤

        1.通过Blob方法获取需要测量的Region

                1.1 主要运用图像形态学、二值化

        2.创建测量句柄

                2.1 create_metrology_model (MetrologyHandle)

        3.设置目标图像大小

                3.1 set_metrology_model_image_size (MetrologyHandle, Width, Height)

        4.添加测量对象

                4.1 add_metrology_object_generic (MetrologyHandle, 'line', LineParam, 20, 5, 1, 30, [], [], Index)

        5.设置测量参数

                5.1 *设置找线的方式(positive,negative,all)从黑到白,从白到黑
                        set_metrology_object_param (MetrologyHandle, 'all', 'measure_transition', 'all')

                5.2 *预期测量的区域个数
                        set_metrology_object_param (MetrologyHandle, 'all', 'num_instances', 12)

                5.3*拟合数
                        set_metrology_object_param (MetrologyHandle, 'all', 'num_instances', 6)

                5.4*高斯平滑系数,值越大,唯一的边缘越清晰
                        set_metrology_object_param (MetrologyHandle, 'all', 'measure_sigma', 5)

                5.5 *区域,垂直与边界的测量区域的一半长度
                        set_metrology_object_param (MetrologyHandle, 'all', 'measure_length1', 80)

                5.6 *区域,相切于边缘的测量区域的一半长度
                        set_metrology_object_param(MetrologyHandle, 'all', 'measure_length2', 10)

                5.7 *最小边缘幅度越大,要求找到的边缘越锐利(灰度变换明显),反而不容易找到边缘
                        set_metrology_object_param (MetrologyHandle, 'all', 'measure_threshold', 20)

                5.8 *测量双立方插入值,区别与bilinear双线性
                        set_metrology_object_param (MetrologyHandle, 'all', 'measure_interpolation', 'bicubic')

                5.9 *取值 all,first,best,last
                        set_metrology_object_param (MetrologyHandle, 'all', 'measure_select', 'all')

                5.10 *设置最小分数0.7
                        set_metrology_object_param (MetrologyHandle, 'all', 'min_score', 0.7)

        6.执行测量,获取边缘点集

        7.获取最终测量数据和轮廓

        8.释放测量句柄

代码

dev_get_window (WindowHandle)
*读取图像
read_image (Image, 'printer_chip/printer_chip_01')

*获取图像大小
get_image_size (Image, Width, Height)

*方式一绘制测量位置直线
*draw_line (WindowHandle, Row1, Column1, Row2, Column2)

*方式二 固定测量位置直线坐标
Row1 := 19.9
Column1 := 810
Row2 := 271.9
Column2 := 808.5

*根据绘制的直线坐标来构建参数对象
LineParam := [Row1, Column1,Row2, Column2]

*绘制测量位置直线 时把直线的坐标写入文本文件,以变查看。这样就可以知道绘制的坐标。
*实际测量时是不可能让人,手动的去绘制每张要测量的图片的
open_file ('LineParam.txt', 'output', FileHandle)
fileStr := '线的坐标Row1:'+Row1+',Column1:'+Column1+',Row2:'+Row2+',Column2:'+Column2
fwrite_string (FileHandle, fileStr)
disp_message (WindowHandle, fileStr, 'window', 0, 0, 'red', 'true')

*创建计算测量句柄
create_metrology_model (MetrologyHandle)

*句柄关联测试的图坐标位置
set_metrology_model_image_size (MetrologyHandle, Width, Height)

*添加测量模型对象(此处是线)
add_metrology_object_generic (MetrologyHandle, 'line', LineParam, 20, 5, 1, 30, [], [], Index)

*根据需求设置测量的参数
*设置找线的方式(positive,negative,all)从黑到白,从白到黑
set_metrology_object_param (MetrologyHandle, 'all', 'measure_transition', 'all')

*预期测量的区域个数
set_metrology_object_param (MetrologyHandle, 'all', 'num_instances', 12)

*拟合数
set_metrology_object_param (MetrologyHandle, 'all', 'num_instances', 6)

*高斯平滑系数,值越大,唯一的边缘越清晰
*set_metrology_object_param (MetrologyHandle, 'all', 'measure _sigma', 5)
set_metrology_object_param (MetrologyHandle, 'all', 'measure_sigma', 5)

*区域,垂直与边界的测量区域的一半长度
set_metrology_object_param (MetrologyHandle, 'all', 'measure_length1', 80)

*区域,相切于边缘的测量区域的一半长度
set_metrology_object_param(MetrologyHandle, 'all', 'measure_length2', 10)

*最小边缘幅度越大,要求找到的边缘越锐利(灰度变换明显),反而不容易找到边缘
set_metrology_object_param (MetrologyHandle, 'all', 'measure_threshold', 20)

*测量双立方插入值,区别与bilinear双线性
set_metrology_object_param (MetrologyHandle, 'all', 'measure_interpolation', 'bicubic')

*取值 all,first,best,last
set_metrology_object_param (MetrologyHandle, 'all', 'measure_select', 'all')

*设置最小分数0.7
set_metrology_object_param (MetrologyHandle, 'all', 'min_score', 0.7)

*开始找边缘
apply_metrology_model (Image, MetrologyHandle)

*获取测量区域找到的边缘坐标集合
get_metrology_object_measures (Contours, MetrologyHandle, 'all', 'all', Row, Column)

*把找到的点通过十字叉来显示
gen_cross_contour_xld (Cross, Row, Column, 6, 0.785398)

*得到线的起点坐标并显示出来
get_metrology_object_result (MetrologyHandle, 0, 'all', 'result_type', 'all_param', Parameter)

*获取计量模型的计量结果轮廓
get_metrology_object_result_contour (Contour, MetrologyHandle, 0, 'all', 1.5)
*取第一条边放到ObjectSelected变量中
select_obj (Contour, ObjectSelected, 1)
*取第二条边放到ObjectSelected1变量中
select_obj (Contour, ObjectSelected1, 2)

*测量两个轮廓之间的距离
distance_cc (ObjectSelected, ObjectSelected1, 'point_to_point', DistanceMin, DistanceMax)
disp_message (WindowHandle, 'length:'+DistanceMin, 'window', 20, 0, 'green', 'true')

结果

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学会玩游戏,智能究竟从何而来?

最近在读梅拉妮米歇尔《AI 3.0》第三部分第九章,谈到学会玩游戏,智能究竟从何而来? 作者: [美] 梅拉妮米歇尔 出版社: 四川科学技术出版社湛庐 原作名: Artificial Intelligence: A Guide for Thinking Humans 译者: 王飞跃 / 李玉珂 / 王晓…

Helm vs Kustomize 深度比较

Helm和Kustomize都是流行的Kubernetes集群部署管理工具,本文比较了两者的优缺点,方便读者根据项目实际情况采用适合的方案。原文: Helm vs Kustomize: why, when, and how[1] 挑战 开始讨论之前,先来看看为什么要使用 Helm 或 Kustomize。 这…

Mac使用K6工具压测WebSocket

commend空格 打开终端,安装k6 brew install k6验证是否安装成功 k6 version设置日志级别为debug export K6_LOG_LEVELdebug执行脚本(进入脚本所在文件夹下) k6 run --vus 100 --duration 10m --out csvresult.csv script.js 脚本解释&…

亿道丨三防平板丨手持平板丨加固平板丨助力地震救援

自土耳其发生7.8级大地震以来,一直都牵动着世人的心。2023年2月10日,据法新社最新消息,强震已造成土耳其和叙利亚两国超2万人遇难。报道称,相关官员和医护人员表示,地震造成土耳其17674人死亡,叙利亚则有33…

基于Springboot的旅游网管理系统设计与实现(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的旅游网管理系统设计与实现(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层…

第二代80KM高效远距离传输:100G ZR4光模块的应用与发展

随着信息时代的发展,数据传输的需求日益增长,而光模块作为数据中心和网络基础设施的关键组成部分,其性能和应用范围也在不断扩大。易天光通信的第二代100G ZR4 80KM光模块很好的满足了当代社会通信网络的需求。本文易天光通信将探讨第二代高效…

3款黑科技软件,却常被错认是微软开发,纯国产的它功能逆天

美丽的外表往往大同小异,而实用的软件却是难得一遇的珍品。尤其是最后一款国产软件,尽管许多人都在使用,但却常常因为误解而闹出笑话。 1、PhotoDemon 这款由国外技术专家开发的免费、开源图片编辑工具,体积小巧,仅需…

Nacos简易示例

目录 步骤: 1. 下载并启动 Nacos Server 2. 创建用户订单微服务 2.1 创建 Spring Boot 项目 2.2 添加依赖 2.3 配置 Nacos 2.4 编写业务逻辑 3. 注册服务到 Nacos 4. 测试服务 Nacos 是一个开源的服务发现和配置管理系统,可以用于微服务架构中的…

Python 鼠标模拟

鼠标模拟即:通过python 进行模拟鼠标操作 引入类库 示例如下: import win32api import win32con import time 设置鼠标位置 设置鼠标位置为窗口中的回收站。 示例如下: # 设置鼠标的位置 win32api.SetCursorPos([30, 40]) 双击图标 设置…

项目:shell实现多级菜单脚本编写

目录 1. 提示 2. 演示效果 2.1. 一级菜单 2.2. 二级菜单 2.3. 执行操作 3. 参考代码 1. 提示 本脚本主要实现多级菜单效果,并没有安装LAMP、LNMP环境,如果要用在实际生成环境中部署LNMP、LAMP环境,只需要简单修改一下就可以了。 2. 演…

自动换刀主轴应用领域有哪些?

自动换刀主轴是一种先进的机床技术,能够实现快速、准确地更换刀具,提高加工效率和精度,因此在现代制造业中得到了广泛应用。 一、自动换刀主轴的应用领域 1.汽车制造业 汽车制造业是自动换刀主轴应用最广泛的领域之一。在汽车制造过程中&am…

DWT硬件延时

DWT硬件延时 文章目录 DWT硬件延时软件&硬件延时方案软件延时硬件延时方案 DWT硬件延时方案DWT硬件延时方案DEMCR寄存器DWT硬件延时方案实现延时初始化:US延时:MS延时: 软件&硬件延时方案 软件延时 static void Delay(uint32_t cou…

Maven【1】(命令行操作)

文章目录 一丶创建maven工程二、理解pom.xml三、maven的构建命令1.编译操作2.清理操作3.测试操作4.打包操作5.安装操作 一丶创建maven工程 首先创建这样一个目录,然后从命令行里进入这个目录: 然后接下来就在这个命令行里进行操作了。 这个命令是&…

Unity中URP实现水体(水下的扭曲)

文章目录 前言一、使用一张法线纹理,作为水下扭曲的纹理1、在属性面板定义一个纹理,用于传入法线贴图2、在Pass中,定义对应的纹理和采样器3、在常量缓冲区,申明修改 Tilling 和 Offset 的ST4、在顶点着色器,计算得到 应…

代码随想录算法刷题训练营day23

代码随想录算法刷题训练营day23:LeetCode(669)修剪二叉搜索树、LeetCode(108)将有序数组转换为二叉搜索树、LeetCode(538)把二叉树转化为累加树 LeetCode(669)修剪二叉搜索树 题目 代码 /*** Definition for a binary tree node.* public class TreeNode {* …

使用解决方案为PowerApps搭建测试环境

为Power Apps搭建另外一套环境 背景描述环境准备开发环境开发项目项目介绍开发环境SharePoint准备测试环境SharePoint准备解决方案创建创建解决方案环境变量准备创建站点环境变量创建文档库环境变量解决方案中创建Apps解决方案中创建power automate测试查看流运行记录查看Share…

TLS1.2抓包解析

1.TLS1.2记录层消息解析 Transport Layer SecurityTLSv1.2 Record Layer: Handshake Protocol: Client HelloContent Type: Handshake (22)Version: TLS 1.0 (0x0301)Length: 253Content Type:消息类型,1个字节。 i 0Version:协议版本&…

并发情况下数据校验-基于数据库实现

并发情况下数据校验-基于数据库实现 数据库行锁原理实际操作数据准备开启事务,更新数据 项目实战项目配置多线程测试 在开发过程中,我们会遇到校验数据的唯一性,数据更新之后是否超过设置的阈值等等。并发情况下数据校验常见方式有使用分布式…

辽宁博学优晨教育视频剪辑培训探索学习新意义

在当今数字化快速发展的时代,视频已成为信息传达的重要载体。辽宁博学优晨教育视频剪辑培训应运而生,不仅为学员提供了专业的学习平台,更在探索学习的意义方面赋予了新的内涵。 视频剪辑作为现代媒体行业的重要技能,其学习意义不仅…