[机器视觉]halcon应用实例 多ROI模板匹配

本示例是单ROI的功能扩展示例,多ROI.后面有空了将出用户自定义ROI。

比单ROI增加ROI区域的连接和合并。还有for的实例应用。步骤同单ROI一样。不懂的可以看一下单ROI文章。[机器视觉]halcon应用实例 单ROI模板匹配-CSDN博客

有需要的可以【点赞】【关注】【收藏】【订阅】

dev_set_color ('red')
dev_set_draw ('margin')
*获取窗口句柄对象
dev_get_window (WindowHandle)
*读取图片
read_image (Image, 'E:/stevenChen/机器视觉学习/HDevelop/视觉图片/ROI/1.bmp')*多ROI 
*选取ROI
*第一个ROI
*画矩形1
*参数说明
*WindowHandle (输入参数)窗口句柄
*Row1, Column1 (输出参数)矩形的左上角坐标
*Row2, Column2 (输出参数)矩形的右上角坐标
draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)
*生成矩形1
*根据上面算子的输出参数生成一个矩形
*Rectangle 输出参数,生成的矩形
*Row1, Column1 (输入参数)矩形的左上角坐标
*Row2, Column2 (输入参数)矩形的右上角坐标
gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)*-------------------
*第二个ROI
*画矩形
draw_rectangle1 (WindowHandle, Row10, Column10, Row20, Column20)
*生成矩形
*根据上面算子的输出参数生成一个矩形
gen_rectangle1 (Rectangle10, Row10, Column10, Row20, Column20)
*连接两个对象,ObjectsConcat = [Objects1,Objects2]
*参数列表:
*第1个参数Objects1是输入对象,即对象1
*第2个参数Objects2是输入变量,即对象2
*第3个参数ObjectsConcat是输出变量,即连接后的区域
*concat_obj (Rectangle, Rectangle10, ObjectsConcat)
*union2
*union2()——将两个区域合并成一个整体,仅限两个
*函数原型:union2(Region1(输入), Region2(输入) : RegionUnion(输出) : : )
*功能:将Region2 和Region1元组内的区域合并成一个独立的区域保存于RegionUnion 。把第二个参数Region2里的所有区域合并,然后将合并后的区域分别与Region1中的每一个区域进行合并,然后保存到RegionUnion 中。最后,RegionUnion 元素个数与Region1元素个数相同。
*参数:
*Region1 (input_object) ——要与Region2中的所有区域的并集计算的区域
*Region2 (input_object) ——要添加到Region1的区域
*RegionUnion (output_object) ——(输出)最终得到的区域
*      要素数::RegionUnion == Region1
union2 (Rectangle, Rectangle10, RegionUnion1)
*-------------------
*第三个ROI
*画矩形
draw_rectangle1 (WindowHandle, Row100, Column100, Row200, Column200)
*生成矩形
*根据上面算子的输出参数生成一个矩形
gen_rectangle1 (Rectangle100, Row100, Column100, Row200, Column200)
*concat_obj (Rectangle100, ObjectsConcat, ObjectsConcatAll)*把所有的输入区域合并为一个区域
*功能:函数将Region元组内的全部区域合并成一个独立的区域,保存于RegionUnion
*参数:
*Region (input_object) ——要计算其并集的区域,也就是一个个的输入区域
*RegionUnion (output_object) ——所有输出区域的并集*要素数: RegionUnion <= Region
*union1 (Rectangle100, RegionUnionAll)
union2 (RegionUnion1, Rectangle100, RegionUnionAll)*锁定ROI并创建模板
*单ROI
*获得特定区域Region位置的图像,获取区域图像
*Image (输入参数)输入的图像
*Rectangle 输入参数)输入的区域,上面画的矩形区域
*ImageReduced (输出参数)输出的图像,是Image中Rectangle的那部分图像
reduce_domain (Image, RegionUnionAll, ImageReduced)*用于创建形状模板
*形状模板是一种用于检测和匹配特定形状的工具,常用于目标识别、物体定位和测量等应用中。
*参数说明:
*ObjectModel:包含待创建模板的形状的二值图像。
*NumLevels:金字塔层数,用于多尺度匹配。可设为“auto”或0—10的整数
*AngleStart:起始角度(以度为单位),用于模板的旋转范围。rad(-180)
*AngleExtent:旋转角度的范围(以度为单位)。rad(-180), rad(180)表示360度匹配
*AngleStep:旋转角度的步长,可以是’auto’或具体的值。
*ScaleMin:最小缩放比例。
*ScaleMax:最大缩放比例。
*ScaleStep:缩放比例的步长。
*Optimization:优化模式,用于加速模板匹配。
*Metric:模板匹配的度量方式。
*Contrast:对比度增强系数。
*MinContrast:最小对比度阈值。
*ModelID:输出的模板ID。
*https://blog.csdn.net/xiaogongzhu001/article/details/131120014
*1.NumLevels(金字塔的层数),金字塔的层数越大,找到匹配使用的时间就越小。(金字塔的层数越大,提取到的特征越少,精准度越低,所以对应的识别时间少)
*如果金字塔的层数设置的太大,模板不容易识别出来,这是需要将find_shape_model函数中MinScore和Greediness参数设置的低一些。
*参数解析及优化 https://blog.csdn.net/the_future_way/article/details/115345989
*create_shape_model (ImageReduced, 'auto', rad(0), rad(360), 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
create_shape_model (ImageReduced, 'auto', rad(-180), rad(180), 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
*-----模板创建结束----------------------------------*-----开始测试----------------------------------------------*图片文件夹
imageDir := 'E:/stevenChen/机器视觉学习/HDevelop/视觉图片/ROI'*获取文件列表
list_files (imageDir, ['files','follow_links','recursive'], ImageFiles)*可以用for算子把文件一个一个打开
for Index := 0 to |ImageFiles| - 1 by 1*从文件集合中获取指定索引的数据imagePath := ImageFiles[Index]    *判断文件是否存在,存在返回true,否则返回false*imagePath 输入参数:要判断的文件路径*FileExists 输出参数: 输出文件是否存在,存在返回true,否则返回falsefile_exists (imagePath, FileExists)if (FileExists)*显示文本消息dev_close_window ()*读取图片read_image (Image, imagePath)  get_image_size (Image, Width, Height)dev_open_window (0, 0, Width, Height, 'black', WindowHandle)dev_display (Image)*4.加载测试图像*read_image (Image1, 'E:/stevenChen/机器视觉学习/HDevelop/视觉图片/ROI/12.bmp')*5.使用已有模板句柄来匹配*形状模板匹配*形状匹配原理:模板创建后,会根据模板中的边缘等关系去图像中进行搜索,可以理解成提取模板中的灰度发生变化的那些点,*然后再去图像中匹配,这样的效果是对干扰比较稳定,匹配速度快,并且即使边缘发生部分遮挡,匹配效果依旧较好*参数说明*参数1:输入图像--单通道图像*参数2:模板句柄*参数3:搜索时的起始角度 rad(-180), rad(180) 正好是一圈*参数4:搜索时的终止角度,必须与创建模板时的有交集 *参数5:被找到的模板最小分数--大于等于这个值才能被匹配*      默认值:0.5      建议值:0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0*      典型值范围:0≤MinScore ≤ 1*      最小增量:0.01       建议增量:0.05*参数6:要找到的模板最大实例数*参数7:要找到的模型实例的最大重叠*      默认值:0.5       建议值:0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0*      典型值范围:0≤ MaxOverlap≤ 1      最小增量:0.01     建议增量:0.05*参数8:计算精度的设置*        'none', 'interpolation', 'least_squares', 'least_squares_high', 'least_squares_very_high'*        'max_deformation 1', 'max_deformation 2', 'max_deformation 3', 'max_deformation 4'*        'max_deformation 5', 'max_deformation 6'*参数9:搜索时金字塔的层级*参数10:贪婪度,搜索启发式,一般都设为0.8,越高速度快,容易出现找不到的情况*       0≤ Greediness ≤ 1   *最后4个:输出匹配位置的行和列坐标、角度、得分 【中心坐标】*https://blog.51cto.com/liming19680104/5152387
*        find_shape_model (Image1, ModelID, rad(0), rad(360), 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)find_shape_model (Image, ModelID, rad(-180), rad(180), 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)*6.把匹配轮廓显示到图像中*ModelContours 输出参数,匹配到的模块轮廓,*ModelID 输入参数,模板ID,*Level 金字塔层数get_shape_model_contours(ModelContours, ModelID, 1)*从点和角度计算刚性仿射变换*参数:*Row1 (输入参数) ——原始点的行坐标*Column1 (输入参数) ——原始点的列坐标*Angle1 (输入参数) ——原始点的角度*Row2 (输入参数) ——转换点的行坐标*Column2 (输入参数) ——转换点的列坐标*Angle2 (输入参数) ——转换点的角度*HomMat2D (输出参数) ——输出转换矩阵*原文链接:https://blog.csdn.net/m0_51271525/article/details/121017373vector_angle_to_rigid (0, 0, 0, Row, Column, Angle, HomMat2D)*ength := tuple_length (row,len)tuple_length (Row, rowLength)if(rowLength > 0)*仿射变换轮廓*对XLD轮廓进行任意仿射2D变换*将任意仿射2D变换,即缩放、旋转、平移和倾斜(倾斜)应用于轮廓中给定的xld轮廓,并以ContoursAffineTrans的形式返回变换后的轮廓*参数:*Contours (输入参数) ——输入XLD轮廓。*ContoursAffineTrans (输出参数) ——转换后的XLD轮廓*HomMat2D (输入参数) ——输入转换矩阵affine_trans_contour_xld (ModelContours, ContoursAffineTrans, HomMat2D)*显示结果dev_display (Image)dev_set_color ('green')dev_display (ContoursAffineTrans)elsedisp_message (WindowHandle, '没有匹配到ROI', 'window', 12, 12, 'black', 'true')endifelsedisp_message (WindowHandle, '图片-不存在->路径:'+imagePath, 'window', 12, 12, 'black', 'true')endif
endfor
*释放模板句柄
clear_shape_model (ModelID)

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

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

相关文章

2024年新提出的算法|LEA爱情进化算法(Love Evolution Algorithm)

Love Evolution Algorithm: a stimulus–value–role theory-inspired evolutionary algorithm for global optimization 爱情进化算法Love Evolution Algorithm&#xff0c;LEA&#xff0c;于2024年2月发表在中科院3区SCI期刊 The Journal of Supercomputing。 1、简介 本文提…

幸运星数(爷再也不想用pow了)

解法&#xff1a; 暴力 #include <iostream> #include <vector> using namespace std; #define endl \nint main() {ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);int n;long long sum 0, a;cin >> n;for (int i 1; i < n; i) {a 1;for (in…

#python升级#CentOS 7 python升级到3.11.6

在 CentOS 7 上升级 Python 版本可能会比较复杂&#xff0c;因为 CentOS 7 默认安装的是 Python 2.7&#xff0c;并且系统很多组件依赖于它。不过&#xff0c;可以通过以下步骤尝试升级到 Python 3.11.6&#xff1a; 安装必要的依赖&#xff1a; sudo yum install gcc openssl-…

洛谷P1015回文数

题目描述 若一个数&#xff08;首位不为零&#xff09;从左向右读与从右向左读都一样&#xff0c;我们就将其称之为回文数。 例如&#xff1a;给定一个十进制数 5656&#xff0c;将 5656 加 6565&#xff08;即把 5656 从右向左读&#xff09;&#xff0c;得到 121121 是一个…

蓝桥杯刷题2

1. 修建灌木 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scan new Scanner(System.in);int n scan.nextInt();for (int i 1;i < n1;i){int distance Math.max(i-1,n-i);System.out.println(distance*2);}scan.close…

软件设计师软考题目解析12 --每日五题

想说的话&#xff1a;要准备软考了。0.0&#xff0c;其实我是不想考的&#xff0c;但是吧&#xff0c;由于本人已经学完所有知识了&#xff0c;只是被学校的课程给锁在那里了&#xff0c;不然早找工作去了。寻思着反正也无聊&#xff0c;就考个证玩玩。 本人github地址&#xf…

种花

分情况&#xff1a; 第一盆k种选择&#xff0c;之后全部k-1种选择 每次相乘结果对1e97取模 #include <iostream> #include <vector> #include <algorithm> using namespace std; #define endl \n const int N 1e9 7;int main() {ios::sync_with_stdio(f…

微信小程序iOS禁止上下拉显示白边

先上图暴露出问题 iOS端这个页面明明正好显示的&#xff0c;非要能下拉上拉给显示出来点白边。这样不就不好看了嘛。。 想了想是不是支持页面下拉导致的&#xff0c;加入以下代码到json文件中。 {"enablePullDownRefresh": false,"usingComponents": {} }…

java009 - Java面向对象基础

1、类和对象 1.1 什么是对象 万物皆对象&#xff0c;客观存在的事物皆为对象。 1.2 什么是面向对象 1.3 什么是类 类是对现实生活中一类具有共同属性和行为的事物抽象。 特点&#xff1a; 类是对象的数据类型类是具有相同属性和行为的一组对象的集合 1.4 什么是对象的属…

project.config.json 文件内容错误] project.config.json: libVersion 字段需为 string, string

家人们&#xff0c;遇到了一个新的报错 于是从网上找了各种方法&#xff0c;有说把开发者工具关闭重启的&#xff0c;有说开发者工具下载重新下载的&#xff0c;有说开发者工具路径安装得在C盘的&#xff0c;均没有效果 解决方法&#xff1a; 1、运行项目&#xff0c;在开发者…

[安洵杯 2019]easy_serialize_php1

打开题目 题目源码&#xff1a; <?php$function $_GET[f];function filter($img){$filter_arr array(php,flag,php5,php4,fl1g);$filter /.implode(|,$filter_arr)./i;return preg_replace($filter,,$img); }if($_SESSION){unset($_SESSION); }$_SESSION["user&q…

好的测试数据管理,到底要怎么做?

你的组织是否实施了测试数据管理&#xff1f;如果你的组织处理关键或敏感的业务数据&#xff0c;测试数据管理肯定会让组织受益。与测试数据相关的问题占所有软件缺陷的 15%&#xff0c;这一事实强调了测试数据的重要性。本文将准确讨论测试数据经理职责、测试数据经理需要什么…

java-ssm-jsp广播剧制作订阅系统

java-ssm-jsp广播剧制作订阅系统 获取源码——》公主号&#xff1a;计算机专业毕设大全

AFL fork server和fuzzer的交互

看了一些博客&#xff0c;都是在说fuzzer和fork server进行交互&#xff0c;由fork server fork出子进程来执行程序&#xff0c;但是不太明白这两者到底是如何在代码层面进行交互的。 run_target中有这么一段代码&#xff0c;大概意思是fuzzer给fork server传递prev_timed_out…

13.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-如果没有工具就创造工具

内容参考于&#xff1a; 易道云信息技术研究院VIP课 上一个内容 &#xff1a;12.游戏网络通信存在的问题 现在把游戏网络的架构看了一个小小的大概&#xff0c;可以用它的接口发数据接收数据了&#xff0c;如果真正想用它这一套东西&#xff0c;真正核心不在于它的接口而在于…

2024GAS《声学大讲堂》

由中国电子音响行业协会主办&#xff0c;上海市浦东新区先进音视频技术协会承办的GAS《声学大讲堂》2021年开播&#xff0c;三年来GAS《声学大讲堂》开设了“沉浸声音频与艺术”、“智能车载音频”、“智能可穿戴”、“智能耳机”、“智能音箱”、“专业音响”、“助听/辅听设备…

老卫带你学---leetcode刷题(268. 丢失的数字)

268. 丢失的数字 问题 给定一个包含 [0, n] 中 n 个数的数组 nums &#xff0c;找出 [0, n] 这个范围内没有出现在数组中的那个数。 示例 1&#xff1a; 输入&#xff1a;nums [3,0,1] 输出&#xff1a;2 解释&#xff1a;n 3&#xff0c;因为有 3 个数字&#xff0c;所以…

R语言安装和简单入门HelloWorld用法

R语言安装和简单入门HelloWorld用法 #R语言安装地址 https://www.r-project.org/ click->CRAN mirror->选择China下列表&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/CRAN/ 选择Download R for Windows 选择base Download R-4.3.2 for Windows 下载文件R-4.3.2-…

怎么重构数据库表结构

重构数据库表结构是指对已有的数据库表进行调整和优化&#xff0c;以提高数据库的性能、可扩展性和可维护性。以下是一些重构数据库表结构的常见步骤&#xff1a; 分析现有表结构&#xff1a;首先&#xff0c;仔细分析现有的数据库表结构&#xff0c;了解表之间的关系和依赖关…

数据结构从入门到精通——算法的时间复杂度和空间复杂度

算法的时间复杂度和空间复杂度 前言一、算法效率1.1 如何衡量一个算法的好坏1.2 算法的复杂度 二、时间复杂度2.1 时间复杂度的概念2.2 大O的渐进表示法2.3常见时间复杂度计算举例2.4等差数列计算公式2.5等比数列计算方法 三、空间复杂度四、 常见复杂度对比五、 复杂度的oj练习…