首页 > 其他分享 >[机器视觉]halcon应用实例 用户自定义多ROI模板匹配

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

时间:2024-06-20 19:22:17浏览次数:8  
标签:ROI 自定义 mbutton halcon 区域 参数 矩形 输入

本示在前面几个halcon ROI示例的基础上继续扩展,更靠进实标情况。为了使ROI匹配更灵活,就要求可以让用户或工程根据实际使用情况自己去画ROI,想画几个是几个。数量不能在代码里写死。

这次升级的主要是增加了一个while循环根据用户的鼠标按键来进行判断是否继续画,还是退出画ROI。

效果

 

 

代码

dev_set_color ('red')
dev_set_draw ('margin')
*获取窗口句柄对象
dev_get_window (WindowHandle)
*读取图片
read_image (Image, 'E:/stevenChen/机器视觉学习/HDevelop/视觉图片/ROI/1.bmp')
 
*生成一个空区域
gen_empty_region (ROIRegion)
 
dev_disp_text ('开始绘制ROI区域', 'window', 'top', 'left', 'green', [], [])
*选取ROI
mbutton := 1
 
while(mbutton == 1)
    *画矩形
    *参数说明
    *WindowHandle (输入参数)窗口句柄
    *Row, Column (输出参数)矩形的中心坐标
    draw_rectangle2 (WindowHandle, Row, Column, Phi, Length1, Length2)
    *生成矩形
*根据上面算子的输出参数生成一个矩形
*Rectangle 输出参数,生成的矩形
*Row1, Column1 (输入参数)矩形的左上角坐标
*Row2, Column2 (输入参数)矩形的右上角坐标
    gen_rectangle2 (Rectangle2, Row, Column, Phi, Length1, Length2)
    *连接两个对象,ObjectsConcat = [Objects1,Objects2]
*参数列表:
*第1个参数Objects1是输入对象,即对象1
*第2个参数Objects2是输入变量,即对象2
*第3个参数ObjectsConcat是输出变量,即连接后的区域
    concat_obj (ROIRegion, Rectangle2, ROIRegion)
    
    *获取鼠标按键,按下鼠标左键 继续绘制,按下鼠标右键结束绘制
    get_mbutton (WindowHandle, Row1, Column1, mbutton)
endwhile
 
 
*把所有的输入区域合并为一个区域
*功能:函数将Region元组内的全部区域合并成一个独立的区域,保存于RegionUnion
*参数:
*Region (input_object) ——要计算其并集的区域,也就是一个个的输入区域
*RegionUnion (output_object) ——所有输出区域的并集
            *要素数: RegionUnion <= Region
union1 (ROIRegion, RegionUnion)
 
*锁定ROI并创建模板
*单ROI
*获得特定区域Region位置的图像,获取区域图像
*Image (输入参数)输入的图像
*Rectangle 输入参数)输入的区域,上面画的矩形区域
*ImageReduced (输出参数)输出的图像,是Image中Rectangle的那部分图像
reduce_domain (Image, RegionUnion, 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)
*-----模板创建结束----------------------------------
 
*-----开始测试----------------------------------------------
*4.加载测试图像
read_image (Image1, 'E:/stevenChen/机器视觉学习/HDevelop/视觉图片/ROI/120.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 (Image1, 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/121017373
vector_angle_to_rigid (0, 0, 0, Row, Column, Angle, HomMat2D)
*仿射变换轮廓
*对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)
 
*释放模板句柄
clear_shape_model (ModelID)

 


————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/cjh16606260986/article/details/136478558

标签:ROI,自定义,mbutton,halcon,区域,参数,矩形,输入
From: https://www.cnblogs.com/stevenchen2016/p/18259348

相关文章

  • 10.[机器视觉]Halcon形态学膨胀,腐蚀,开运算,闭运算
    膨胀:对边界点进行扩充,填充空洞,使边界向外部扩张的过程。 腐蚀:消除物体边界点,使边界向内部收缩的过程,把小于结构元素的物体去除掉. 开运算:先腐蚀后膨胀的过程称为开运算。作用:去除孤立的小点,毛刺,消除小物体,平滑较大物体边界,同时不改变其面积.闭运算:先膨胀......
  • [机器视觉]halcon应用实例 边缘检测
    一个学习找边的实例边缘检测的步骤图解步骤1.通过Blob方法获取需要测量的Region1.1主要运用图像形态学、二值化2.创建测量句柄2.1create_metrology_model(MetrologyHandle)3.设置目标图像大小......
  • Android的Manifest.xml文件有什么用
     Android的Manifest.xml文件是一个重要的配置文件,用于描述应用程序的各种信息,包括应用程序的包名、版本号、应用程序的入口Activity、权限要求等等。它的作用如下:1.声明权限:Manifest文件可以声明应用程序需要使用的权限,例如访问网络、读写SD卡等。当用户安装应用程序时,系统会向......
  • HALCON-从入门到入门-相机标定-内参外参
    1.废话为什么要进行相机标定几个坐标系像素坐标系(图片坐标系)就是我们在电脑上看到图片的坐标系,以左上角为原点(2d坐标系)单位是像素pixel相机坐标系相机物方视野投影的坐标系,单位是mm世界坐标系就是真实的世界坐标系,单位是mm标定的结果标定的结果中有内参矩阵,外参,畸......
  • 【Android】代码中将 SVG 图像转换颜色
    要在代码中将SVG图像转换为黑色,你可以使用一个库,例如AndroidSVG或SVG-Android。以下是一个简单的示例代码,展示了如何通过代码方式将SVG图像改为黑色://导入AndroidSVG库importcom.caverock.androidsvg.SVG;importcom.caverock.androidsvg.SVGParseException;......
  • 【Android】Android Studio版本手动升级到指定版本方法
    前言AndroidStudio本身存在自动升级的功能,但是这个功能使用的时候基本都是要升级到最新版本,但是有时候我们也不想升级到最新版本,是想升级到某一个版本,这个时候,AndroidStudio的自动升级版本的功能就无法使用了,需要我们进行手动升级。自动升级方法点击这里就可升级了,自......
  • 快速自定义表单开发受欢迎的几个优势
    为了满足业务需求,低代码技术平台带着更理想的优势特点,广泛用于各中大型企业中,是助力企业实现提质增效、提升开发效率的有力武器。那么,您知道快速自定义表单开发的优势体现在哪里吗?为了帮助大家了解这些详情,接下来将会为大家介绍低代码技术平台及快速自定义表单开发的优势,希望能给......
  • 【ASeeker】Android 源码捞针,服务接口扫描神器
    ASeeker是一个Android源码应用系统服务接口扫描工具。项目已开源:☞Github☜如果您也喜欢ASeeker,别忘了给我们点个星。说明ASeeker项目是我们在做虚拟化分身产品(『空壳』)过程中的内部开发工具,目的是为了提升Android系统各版本适配效率。由于产品需支持Android9......
  • C语言----自定义类型:联合和枚举
     1.联合体联合体的特点像结构体一样,联合体也是一个或者多个成员构成的,这些成员可以是不同的类型联合体的关键字:union结构体的关键字:struct枚举的关键字:enum但是编译器只为最⼤的成员分配⾜够的内存空间。联合体的特点是所有成员共⽤同⼀块内存空间。所以联合体也叫:共......
  • Android面试题 之App性能优化的卡顿监控和卡顿优化
    本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点卡顿优化这里主要介绍卡顿优化方面的布局优化布局优化1、在主线程中,加载SP,或者是缓存加载,JSON解析,可以放到Idelhander2、viewpager的懒加载,用viewpager2替换v......