模板图片:目标是获取图像左上角位置的数字

直接想法,直接用一个框将数字框出来,然后对图片进行模板匹配(不可行,因为图像中的数字不是固定的)

所以需要选择图像中的固定不变的区域来作为模板,然后根据模板区域来找到我们的目标区域,案例以左上角的商标名称作为模板区域

代码:案例图片在C:\Users\HJ\AppData\Roaming\MVTec\HALCON-21.05-Progress\examples\images\blister(根据自己安装halcon的位置来寻找)

*读取模板图片,了解目标需求:获取图片左上角的数字并识别出来
read_image (TemplateImage, 'C:/Users/HJ/Desktop/test_image/cd_cover/cd_cover_01.png')
get_image_size (TemplateImage, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_display(TemplateImage) *第一想法肯定是:既然要找数字,直接模板匹配找数字就好了,但是模板匹配找的是与图像中与模板类似的区域,但数字明显会发生变化。
*所以需要找所有图像上固定不会变的区域来作为模板,并求出这个区域的中心,本例以左上角的商标名称作为模板区域
draw_rectangle1(WindowHandle, Row1, Column1, Row2, Column2)
gen_rectangle1(NumberRectangle, Row1, Column1, Row2, Column2)
reduce_domain(TemplateImage, NumberRectangle, TemplateImageReduced)
area_center(NumberRectangle, Area, CenterModelROIRow, CenterModelROIColumn) *选择完模板区域之后,我们的目标区域(数字)在模板区域的下面,所以再用一个框将目标区域框出来
*这样子就知道了目标区域与模板区域之间的关系,在后续进行模板匹配的时候,匹配到模板区域之后,就可以通过仿射变换将目标区域找出来
gen_rectangle1 (NumberROI, Row2, Column1, Row2 + 30, Column2) *创建一个shape模型,角度范围0-rad(360)
create_shape_model(TemplateImageReduced, 'auto', 0, rad(360), 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
get_shape_model_contours(ShapeModel, ModelID, 1)
ImageFiles := 'cd_cover/cd_cover_'
for I := 1 to 4 by 1
read_image(SearchImage, ImageFiles + I$'.2d')
find_shape_model (SearchImage, ModelID, 0, rad(360), 0.7, 1, 0.7, 'least_squares', 0, 1, RowMatch, ColumnMatch, AngleMatch, Score)
if (|Score| > 0)
*先对模板区域进行仿射变换,找到图片中的模板区域
vector_angle_to_rigid (0, 0, 0, RowMatch, ColumnMatch, AngleMatch, MovementOfModel)
affine_trans_contour_xld (ShapeModel, ModelAtNewPosition, MovementOfModel) *做一个仿射变换,获取模板区域的仿射变换矩阵,因为模板匹配的结果默认是以(0,0)作为原点,所以需要映射到实际图片中的位置
vector_angle_to_rigid (CenterModelROIRow, CenterModelROIColumn, 0, RowMatch, ColumnMatch, AngleMatch, MovementOfObject)
affine_trans_region(NumberROI, RegionAffineTrans, MovementOfObject, 'nearest_neighbor') *获取到目标区域之后,求目标区域(矩阵)的逆,然后将该逆矩阵和原图做矩阵运算,生成新的图像
hom_mat2d_invert(MovementOfObject, HomMat2DInvert)
affine_trans_image(SearchImage, RectifiedSearchImage, HomMat2DInvert, 'constant', 'false')
*生成的图像是旋转正了的,区域与模板图像的区域位置相同,所以就可以获取前出目标区域
reduce_domain(RectifiedSearchImage, NumberROI, RectifiedNumberROIImage)
endif endfor
clear_shape_model(ModelID)

Halcon 模板匹配实战代码(一)的更多相关文章

  1. halcon 模板匹配(最简单)

    模板匹配是机器视觉工业现场中较为常用的一种方法,常用于定位,就是通过算法,在新的图像中找到模板图像的位置.例如以下两个图像.   这种模板匹配是最基本的模板匹配.其特点只是存在平移旋转,不存在尺度变化 ...

  2. 重新看halcon模板匹配

    工业中模板匹配有很多需求. 代码如下: read_image (Image, 'J:/测试图片/test1/1.bmp') get_image_size (Image, Width, Height) ...

  3. halcon模板匹配

    在机器视觉应用中,经常需要对图像进行仿射变换.1.在基于参考的视觉检测中,由于待检图像与参考图像或多或少都会存在几何变化(平移.旋转.缩放等),所以在做比较之前一般都要对待检图像进行仿射变换以对齐图像 ...

  4. halcon 模板匹配 -- 转化 vector_angle_to_rigid

    ********************************模板匹配 ********************create_shape_model创建模板,这个函数有许多参数,其中金字塔的级数由N ...

  5. halcon 模板匹配 -- find_shape_model

    find_shape_model(Image : :  //搜索图像 ModelID, //模板句柄 AngleStart,  // 搜索时的起始角度 AngleExtent, //搜索时的角度范围, ...

  6. halcon 模板匹配 -- create_shape_model

    create_shape_model(Template : : //reduce_domain后的模板图像 NumLevels,//金字塔的层数,可设为“auto”或0—10的整数 AngleStar ...

  7. 基于HALCON的模板匹配方法总结

    注:很抱歉,忘记从转载链接了,作者莫怪.... 基于HALCON的模板匹配方法总结 很早就想总结一下前段时间学习HALCON的心得,但由于其他的事情总是抽不出时间.去年有过一段时间的集中学习,做了许多 ...

  8. 转载:基于HALCON的模板匹配方法总结

    转载链接:     http://blog.csdn.net/b108074013/article/details/37657801 很早就想总结一下前段时间学习HALCON的心得,但由于其他的事情总 ...

  9. Halcon编程-基于形状特征的模板匹配

    halcon软件最高效的一个方面在于模板匹配,号称可以快速进行柔性模板匹配,能够非常方便的用于缺陷检测.目标定位.下面以一个简单的例子说明基于形状特征的模板匹配.      为了在右图中,定位图中的三 ...

随机推荐

  1. DevExpress控件与VS和.NET各个版本的支持情况

    如下图所示,绿色Yes代表支持,红色No代表不支持.对于有些人觉得装了dev后,vs工具箱没有,一般都是以下两大问题: 1.要么你的Dev的版本不支持你当前的VS版本,没有很正常. 2.要么你的项目的 ...

  2. 『现学现忘』Git基础 — 14、Git基础操作的总结与补充

    目录 1.Git本地版本库结构 2.Git常用操作方法 3.补充:添加多个文件到暂存区 4.补充:提交操作未写备注 5.补充:从工作区直接提交到版本库 1.Git本地版本库结构 如下图所示: 工作区( ...

  3. k8s入门之Ingress(七)

    Ingress 的功能其实很容易理解:所谓 Ingress,就是 Service 的"Service",代理不同后端 Service 而设置的负载均衡服务. 一.安装ingress ...

  4. ValidForm5.3.2 忽略表单项校验详解

    ValidForm 官方文档 项目的需求是这样的:一个checkbox,一个input,选中checkbox的时候,需要校验input,取消选中的时候,不要校验input. <input typ ...

  5. XCTF练习题---MISC---What-is-this

    XCTF练习题---MISC---What-is-this flag:AZADI TOWER 解题步骤: 1.观察题目,下载附件 2.下载后发现是个压缩包,文件内容不清楚,试试改为压缩包看看效果,发现 ...

  6. 看完复旦博士用Python统计核酸结果后,我照着也写了一个

    前几天,人民日报公众号报道了复旦博士生自己写代码,通过OCR和正则表达式统计核酸截图结果.具体文章见:https://mp.weixin.qq.com/s/l8u9JifKDlRDoz32-jZWQg ...

  7. DOM操作标签,事件绑定,jQuery框架

    DOM操作标签 ''' 在起变量名的时候 如果该变量指向的是一个标签 那么建议使用 xxxEle eg:aEle\pEle\divEle\spanEle ''' 基本使用 动态创建一个标签 var 变 ...

  8. 【mq】从零开始实现 mq-13-注册鉴权 auth

    前景回顾 [mq]从零开始实现 mq-01-生产者.消费者启动 [mq]从零开始实现 mq-02-如何实现生产者调用消费者? [mq]从零开始实现 mq-03-引入 broker 中间人 [mq]从零 ...

  9. linux篇-centos7安装samba服务器

    1查看是否安装samba服务 2如果为空则没有安装,安装显示安装完成即成功 3查看samba状态 4查看配置文件的位置 5配置文件备份,直接传输到本地备份 6修改配置文件 Path共享目录位置 Val ...

  10. 好客租房24-react中的事件处理(事件绑定)

    3.1事件绑定 React事件绑定语法和DOM事件语法相似 语法:on+事件名称={事件处理程序} 比如οnclick={()=>{}} //导入react     import React f ...