Halcon_模板匹配
*
模板匹配
*读取并显示图像;
*确定模板ROI及检测ROI;
*创建模型;
*匹配模板;
*ROI仿射变换,得到ROI位置dev_update_off()
dev_close_window ( )*#读取整个文件夹的图像
*1 列出指定路径下的文件
list_files ('./Files', 'files', Files)
tuple_regexp_select (Files, '\\.jpg$', Files)
read_image (Image, Files[0])dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
dev_display (Image)*2 根据模板形状创建相应区域
read_image (T, './moban/moban_1.jpg')get_image_size (T, Width, Height)
dev_set_color ('red')*圆形
gen_circle (shape, 2093, 1630, 1773)
*矩形
*gen_rectangle1 (shape, 164.5, 126.5, 323, 476.5)*多边形轮廓
*dev_set_color ('green')
*dev_set_line_width (3)
*坐标数组
*rows1:=[20,100,100,20,20]
*cols1:=[20,20,250,250,20]
*radius:=[20,20,20,20,20]
*rows2:=[20,20,100,100,20]
*cols2:=[320,550,550,320,320]
*带圆角的多边形轮廓
*gen_contour_polygon_rounded_xld (Contour, rows1, cols1, radius, 1)
*不带圆角的多边形轮廓
*gen_contour_polygon_xld (Contour1, rows2, cols2)
*生成十字形状
*gen_cross_contour_xld( : Cross : Row, Col, Size, Angle :)*3 将模板从所在区域分离
* read_image (image, 'D:/0halcon/demo/20220425/2.jpg')*可以选择一个文件
*opening_circle (Image, RegionOpening, 3.5)
reduce_domain (Image, shape, ImageReduced)*4 创建模板
*圆用create_shape_model (ImageReduced, 'auto', -0.39, 0.79, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
create_shape_model (ImageReduced, 4, rad(0), rad(360), 'auto', 'auto', 'use_polarity', 30, 10, ModelID)
*算子原型:create_shape_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, Contrast, MinContrast : ModelID)
*–Template :用于创建模板的图像,是原图的模板ROI区域;
*–NumLevels:金字塔层的最大层数;
*–AngleStart:模板的最小旋转角度,以弧度为单位;
*–AngleExtent:旋转角度范围,必须≥0,以弧度为单位;如果超出角度范围,则模型搜索不到
*–AngleStep:角度步长,以弧度为单位;
*–Optimization:生成模型的优化方法;
*–Metric:模板匹配的条件,在模板与图像亮暗发生反转时可使用;
*–Contrast:创建模型时,模型点的对比度;
*–MinContrast :在搜索的图像中,搜索对象的最小对比度,必须<Contrast;
*–ModelID:模型的句柄。*5 设置原点
area_center (shape, Area, Row1, Column1)
set_shape_model_origin (ModelID, Row1, Column1)
*set_shape_model_origin (ModelID, -Row, -Column)*6 获取初始模板轮廓
get_shape_model_contours (ModelContours, ModelID, 1)dev_set_color ('red')
dev_set_draw ('margin')
dev_display (ModelContours)*7 匹配模板
for Index := 0 to |Files|-1 by 1read_image (Image, Files[Index])*7.1在另一幅图中查找对应区域 //进行模板匹配找模板*开运算*opening_rectangle1 (Image, RegionOpening, Width, Height)find_shape_model (Image, ModelID, 0, rad(360), 0.4, 1, 0.5, 'least_squares', 0, 0.7, Row3, Column3, Angle, Score)*算子原型:find_shape_model(Image : : ModelID, AngleStart, AngleExtent, MinScore, *NumMatches, MaxOverlap, SubPixel, NumLevels, Greediness : Row, Column, Angle, Score)**– Image :输入图像;*–ModelID:模型的句柄;*–AngleStart:模板的最小旋转角度,以弧度为单位;*–AngleExtent:旋转角度范围,必须≥0,以弧度为单位;如果超出角度范围,则模型搜索不到*–MinScore:要搜索到的模型实例的最小得分,如果低于此分数,则搜索不到;*–NumMatches:要搜索到的模型实例的个数;*–MaxOverlap:要找到的模型实例的最大重叠;*–SubPixel:确定找到的目标是否使用亚像素精度提取;*–NumLevels:搜索过程中使用的金字塔级别的数量 ;*–Greediness :搜索启发式的“贪婪度”,(0:安全但缓慢;1:快,但可能匹配不到)*–Row:找到的模型实例的行坐标,坐标值是找到模板的原点在图像坐标系中的行坐标;*–Column:找到的模型实例的列坐标,坐标值是找到模板的原点在图像坐标系中的列坐标;*–Angle:找到的模型实例的角度;*–Score: 找到的模型实例的分数。*7.2坐标转行,得到模板的ROI和检测ROI,确定匹配位置的轮廓*7.2.1 先获取模板轮廓,获取轮廓在(0,0)位置;*7.2.2:求模板匹配实例---的旋转矩阵; *7.2.3:利用仿射变换---得到匹配实例--轮廓; *7.2.4:轮廓转成区域;if (Row3>=0) //如果找到模板数>0*显示找到的--模板轮廓dev_display_shape_matching_results (ModelID, 'red', Row3, Column3, Angle, 1, 1, 0)*循环遍历每个查到的实例for I := 0 to |Score| - 1 by 1vector_angle_to_rigid (Row3, Column3, Angle, Row3, Column3, Angle, HomMat2D1)*算子原型:vector_angle_to_rigid( : : Row1, Column1, Angle1, Row2, Column2, Angle2 : HomMat2D)*–Row1:原始点的行坐标;*–Column1:原始点的列坐标;*–Angle1:原始点的角度;*–Row2:变换点的行坐标;*–Column2:变换点的列坐标;*–Angle2:变换点的角度;*–HomMat2D:输出的变换矩阵。*给旋转矩阵添加缩放信息hom_mat2d_scale (HomMat2D1, 2, 2, Column3, Row3, HomMat2DScale)*通过初始模板和旋转矩阵运算---得到模板实例轮廓affine_trans_contour_xld (ModelContours, ContoursAffineTrans, HomMat2DScale)*轮廓转区域gen_region_contour_xld (ContoursAffineTrans, Region, 'filled')*得到匹配图像的轮廓线affine_trans_contour_xld (ContoursAffineTrans, ContoursAffineTrans1, HomMat2DScale)affine_trans_region (Region, RegionAffineTrans, HomMat2DScale, 'nearest_neighbor')endfor*dev_set_color ('red')*dev_display (RegionAffineTrans)endifendfor**获取指定轮廓上点的像素坐标
*get_contour_xld (ContoursAffineTrans, Row1, Col)
Halcon_模板匹配相关推荐
- 《OpenCV3编程入门》学习笔记9 直方图与匹配(五)模板匹配
9.5 模板匹配 基本思想: 在一幅图像中寻找与另一幅模板图像最匹配的部分,通过在输入图像上滑动图像块,对实际的图像块和输入图像进行匹配. 9.5.1 模板匹配:matchTemplate()函数 ...
- OpenCV+python:模板匹配
1,模板匹配的概念及原理 模板匹配是一项在一幅图像中寻找与另一幅模板图像最匹配(相似)部分的技术. 我们需要2幅图像: 模板 (T): 将和原图像比照的图像块 原图像 (I): 在这幅图像里,我们希望 ...
- OpenCV(项目)车牌识别3 -- 模板匹配
目录 一.基础理论 1.思想 2.大致过程 二.详细过程 1.首先需要模板库 2.得到模板 3.原图限定大小 4.模板匹配 5.匹配所有子文件夹,保存最佳得分(最匹配项) 三.大致过程(细分类,节省时 ...
- OpenCV(二十)模板匹配
目录 一.基础理论 1.作用与过程 2.原理 3.函数matchTemplate 二.代码 三.效果 参考资料 一.基础理论 1.作用与过程 所谓的模板匹配,就是在给定的图片中查找和模板最相似的区域, ...
- 人眼模板匹配自动跟踪
void trackEye(cv::Mat& im, cv::Mat& tpl, cv::Rect& rect) {// 人眼位置cv::Size pSize(rect.wid ...
- OpenCV中使用模板匹配识别空闲的货架空间
但是点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 假设你是一名在超市工作的员工,被要求在商店里四处走动,检查需要 ...
- Opencv java模板匹配-角点检测(11)
函数 在opencv中有模板匹配的方法, Imgproc.matchTemplate(src, template, result, Imgproc.TM_CCOEFF); 这个方法输入的参数分别是: ...
- python opencv模板匹配多目标_基于opencv的多目标模板匹配
利用opencv进行多目标模板匹配,只要是利用其matchTemplate函数,但在多目标(这里是讨论目标图片中不同大小模板的匹配),以下贴出代码和图片,供大家参考: #include #includ ...
- OpenCvSharp手绘ROI区域+模板匹配+霍夫变换检测圆的边界
最终效果如下: 左侧为检测图片.右侧为模板,右下角textbox为轮毂中心的像素坐标 操作步骤: 1.点击打开图像选择一张比较不错的图片,用于画模板: 2.在picturebox中画取ROI区域生成模 ...
最新文章
- 文件上传的实现(C#)
- proguard的简单配置说明
- 北斗导航 | 坐标转换:ECEF转LLA:GPS坐标系:WGS84(matlab代码)
- spring 三级缓存_通过画图+视频把循环依赖、监听器等等spring源码讲明白了
- [转]Displaying standard DataTables in MVC
- rsync实时同步服务部署
- 20个Android游戏源码,…
- 程序员如何写工作日志?
- python毕业论文答辩ppt_如何制作优秀的毕业论文答辩 PPT?
- 电脑驱动器中出现Winretools和ESP问题
- 学了Java可以做什么工作
- SCC1传输请求(同系统跨Client)
- 思岚S2激光雷达1—初次连接
- GEO,IGSO,MEO,LEO
- android 全景拼接软件,这款全景图片拼接软件很强大
- dataview中写入对象_DataView对象
- 连花清瘟胶囊新冠应用 大健康医药·李喜贵:微量元素作用解密
- springboot + vue3实现视频播放Demo(video.js Vue3-video-play视频播放器)
- 如何写一个简单的局域网游戏
- Matlab GUI界面编程小白学习笔记