Halcon 模板匹配实战代码(一)
模板图片:目标是获取图像左上角位置的数字
直接想法,直接用一个框将数字框出来,然后对图片进行模板匹配(不可行,因为图像中的数字不是固定的)
所以需要选择图像中的固定不变的区域来作为模板,然后根据模板区域来找到我们的目标区域,案例以左上角的商标名称作为模板区域
代码:案例图片在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 模板匹配实战代码(一)的更多相关文章
- halcon 模板匹配(最简单)
模板匹配是机器视觉工业现场中较为常用的一种方法,常用于定位,就是通过算法,在新的图像中找到模板图像的位置.例如以下两个图像. 这种模板匹配是最基本的模板匹配.其特点只是存在平移旋转,不存在尺度变化 ...
- 重新看halcon模板匹配
工业中模板匹配有很多需求. 代码如下: read_image (Image, 'J:/测试图片/test1/1.bmp') get_image_size (Image, Width, Height) ...
- halcon模板匹配
在机器视觉应用中,经常需要对图像进行仿射变换.1.在基于参考的视觉检测中,由于待检图像与参考图像或多或少都会存在几何变化(平移.旋转.缩放等),所以在做比较之前一般都要对待检图像进行仿射变换以对齐图像 ...
- halcon 模板匹配 -- 转化 vector_angle_to_rigid
********************************模板匹配 ********************create_shape_model创建模板,这个函数有许多参数,其中金字塔的级数由N ...
- halcon 模板匹配 -- find_shape_model
find_shape_model(Image : : //搜索图像 ModelID, //模板句柄 AngleStart, // 搜索时的起始角度 AngleExtent, //搜索时的角度范围, ...
- halcon 模板匹配 -- create_shape_model
create_shape_model(Template : : //reduce_domain后的模板图像 NumLevels,//金字塔的层数,可设为“auto”或0—10的整数 AngleStar ...
- 基于HALCON的模板匹配方法总结
注:很抱歉,忘记从转载链接了,作者莫怪.... 基于HALCON的模板匹配方法总结 很早就想总结一下前段时间学习HALCON的心得,但由于其他的事情总是抽不出时间.去年有过一段时间的集中学习,做了许多 ...
- 转载:基于HALCON的模板匹配方法总结
转载链接: http://blog.csdn.net/b108074013/article/details/37657801 很早就想总结一下前段时间学习HALCON的心得,但由于其他的事情总 ...
- Halcon编程-基于形状特征的模板匹配
halcon软件最高效的一个方面在于模板匹配,号称可以快速进行柔性模板匹配,能够非常方便的用于缺陷检测.目标定位.下面以一个简单的例子说明基于形状特征的模板匹配. 为了在右图中,定位图中的三 ...
随机推荐
- css 动画 (2)
1. html 结构 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- GitHub 自动合并 pr 的机器人——auto-merge-bot
本文首发于 Nebula Graph Community 公众号 背景 作为一款开源的分布式图数据库产品,Nebula 所有的研发流程都在 GitHub 上运作.基于 GitHub 生态 Nebula ...
- Python GDAL矢量转栅格详解
前言:挺久没有更新博客了,前段时间课程实验中需要用代码将矢量数据转成栅格,常见的点栅格化方法通过计算将点坐标(X,Y)转换到格网坐标(I,J),线栅格化方法主要有DDA算法.Bresenham算法等, ...
- Istio实践(3)- 路由控制及多应用部署(netcore&springboot)
前言:接上一篇istio应用部署及服务间调用,本文介绍通过构建.netcore与springboot简单服务应用,实现服务间调用及相关路由控制等 1..netcore代码介绍及应用部署 新建.netc ...
- Git&Gitee
目录 Git Git介绍 安装 命令学习 Git的作用 git与svn比较 Git,GitHub,GitLab,Gitee Git工作流程 Git常用命令 在仓库目录终端下 - 设置全局用户 在仓库目 ...
- React 父组件调用子组件的方法
父组件调用子组件的方法 React v16.3.0 及以后版本使用 import React, {Component} from 'react'; export default class Paren ...
- 干货 | 一文彻底读懂nginx中的location指令
一个执着于技术的公众号 Nginx系列导读 给小白的 Nginx 10分钟入门指南 Nginx编译安装及常用命令 完全卸载nginx的详细步骤 Nginx 配置文件详解 一文带你读懂Nginx反向代理 ...
- HMS Core地理围栏能力助你实现指定范围人群的精准消息推送
精准推送是移动端产品留存阶段的主要运营手段,精准推送常常会与用户画像紧密结合,针对用户的喜好.画像,采用不同策略,但基于用户所属区域推送消息却很难实现.目前市面上大多数第三方消息推送服务商,在系统未深 ...
- js实时查询,为空提示
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Solon 1.7.6 发布,更现代感的应用开发框架
相对于 Spring Boot 和 Spring Cloud 的项目 启动快 5 - 10 倍 qps 高 2- 3 倍 运行时内存节省 1/3 ~ 1/2 打包可以缩小到 1/2 ~ 1/10(比如 ...