码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【图像处理】模板匹配的学习笔记


    1. 基于像素值相关性的方法

    1.1 优势和局限性

    优势

    • 实现简单:有现成的算法库,例如opencv

    局限性

    • 对尺度变化敏感:由于模板匹配方法依赖于像素值的直接比较,因此它对图像的尺度变化非常敏感。当目标物体的尺度发生变化时,像素值之间的对应关系可能会发生改变,从而导致匹配结果不准确。

    Note:这个问题我们在做爬虫时就遇到过,当屏幕画面出现变化时,APP的图标变小,就出现无法匹配不准确的情况。

    1.2 OpenCV的模板匹配算法

    • cv.TM_CCOEFF
    • cv.TM_CCOEFF_NORMED
    • cv.TM_CCORR
    • cv.TM_CCORR_NORMED
    • cv.TM_SQDIFF
    • cv.TM_SQDIFF_NORMED

    1.3 匹配代码模板

    image = cv2.imread(r"scene.png", cv2.IMREAD_GRAYSCALE)
    template = cv2.imread(r"element.png", cv2.IMREAD_GRAYSCALE)
    res = cv2.matchTemplate(img, template, cv2.TM_CCOEFF_NORMED)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
    
    if max_val > 0.8:
        print("Detected")
    else:
        print("Not detected")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    Note:

    1. cv2.TM_CCOEFF_NORMED:相较于其它方法,通常被认为具有较好的鲁棒性

    2. 特征点算法

    常用的特征子算法(按照提取效果排序):

    • SIFT
    • ORB

    关于使用Opencv实现基于特征子的目标匹配,请参考官方教程《OpenCV – Features2D + Homography to find a known object》

    2.1 SIFT算法(Offcial Choice)

    我感觉SIFT还是一项很好的算法,能够提取的特征点很多,并且SIFT还是OpenCV官方Demo中使用的特征子算法,
    请参考 OpenCV: Feature Matching + Homography to find Objects

    2.2 特征点算法的torch实现

    请参考博文《实践教程 | 使用Pytorch从头实现Canny边缘检测》;

    2.3 Match算法(模板匹配)

    现在我在网上看到的特征点匹配算法有:

    • 暴力匹配(BF匹配)
    • KNN匹配
    • FLANN匹配

    BF匹配OpenCV参数说明可以参考《Opencv for python(2)–图像匹配》;
    这里我们尽量使用OpenCV已经实现好的匹配算法

  • 相关阅读:
    【Mycat1.6】缓存不生效问题处理
    Linux学习笔记--Linux文件管理类命令详解
    第一章 硬件选型
    2022年测试行业的新变化
    【TES745D】青翼自研基于复旦微的FMQL45T900全国产化ARM核心模块(100%国产化)
    Python 3.12.0 Release 版本
    【Eclipse】取消按空格自动补全,以及出现没有src的解决办法
    【XGBoost】第 1 章:机器学习前景
    Centos7安装mysql详细过程
    2. gin中间件注意事项、路由拆分与注册技巧
  • 原文地址:https://blog.csdn.net/songyuc/article/details/132590456
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号