OpenCV Python 中与多个对象的模板匹配

2023-11-28

我正在尝试使用 opencv python 在图像中查找多个模板,根据这个链接.

但问题是,为单个对象返回多个位置略有不同的点。 像这样的东西:

enter image description here

我不想用cv2.minMaxLoc()因为图像中有多个模板。 我写了一个删除平仓头寸的函数,但我想知道这个问题有什么简单的解决方案吗? 谢谢。


查找多个匹配的一种方法是覆盖找到的匹配并再次运行匹配。Edit: A better找到多个匹配的方法是重写results。在第一个示例中,我们用零填充结果的匹配部分(对 SQDIFF 或 CCORR_NORMED 使用零),然后在循环中查找下一个匹配项。

import cv2
import numpy as np
import time

image = cv2.imread('smiley.png', cv2.IMREAD_COLOR )
template = cv2.imread('template.png', cv2.IMREAD_COLOR)

h, w = template.shape[:2]

method = cv2.TM_CCOEFF_NORMED

threshold = 0.90

start_time = time.time()

res = cv2.matchTemplate(image, template, method)

# fake out max_val for first run through loop
max_val = 1
while max_val > threshold:
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)

    if max_val > threshold:
        res[max_loc[1]-h//2:max_loc[1]+h//2+1, max_loc[0]-w//2:max_loc[0]+w//2+1] = 0   
        image = cv2.rectangle(image,(max_loc[0],max_loc[1]), (max_loc[0]+w+1, max_loc[1]+h+1), (0,255,0) )

cv2.imwrite('output.png', image)

输入图像:

enter image description here

使用眼睛作为模板图像(因为有不止一只眼睛!)

enter image description here

output:

enter image description here

这是我通过在图像上书写来实现的原始方法。这种方式要慢得多,因为我们执行 n+1matchTemplaten 个匹配的操作。经过测量,这种技术慢了 1000 倍。

import cv2
import numpy as np

image = cv2.imread('smiley.png', cv2.IMREAD_COLOR )
template = cv2.imread('template.png', cv2.IMREAD_COLOR)

h, w = template.shape[:2]

method = cv2.TM_CCOEFF_NORMED

threshold = 0.95

# fake out max_val for first run through loop
max_val = 1
while max_val > threshold:
    res = cv2.matchTemplate(image, template, method)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)

    # using top ranked score, fill in that area with green
    image[max_loc[1]:max_loc[1]+h+1:, max_loc[0]:max_loc[0]+w+1, 0] = 0    # blue channel
    image[max_loc[1]:max_loc[1]+h+1:, max_loc[0]:max_loc[0]+w+1, 1] = 255  # green channel
    image[max_loc[1]:max_loc[1]+h+1:, max_loc[0]:max_loc[0]+w+1, 2] = 0    # red channel


cv2.imwrite('output.png', image)

输出图像:

enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenCV Python 中与多个对象的模板匹配 的相关文章

  • 从 Python 将分层 JSON 数据写入 Excel xls?

    我想将一些数据从 python 写入 xlsx 我目前将其存储为 JSON 但它从 Python 中输出什么并不重要 单个文章的 JSON 如下所示 Word Count 50 Key Words Blah blah blah Foo Fr
  • Django 说“id 可能不为 NULL”,但为什么会这样呢?

    我今天要疯了 我只是尝试插入一条新记录 但它返回了 post blogpost id 可能不为 NULL 错误 这是我的模型 class BlogPost models Model title models CharField max le
  • 将相同的 Patch 实例添加到 matplotlib 中的多个子图中

    我正在尝试将补丁的相同实例添加到 matplotlib 中的多个轴 这是最小的例子 import matplotlib pyplot as mpl plt import matplotlib patches as mpl patches f
  • 监控培训课程如何运作?

    我试图理解使用之间的区别tf Session and tf train MonitoredTrainingSession 以及我可能更喜欢其中之一 似乎当我使用后者时 我可以避免许多 杂务 例如初始化变量 启动队列运行程序或设置文件编写器以
  • 多个列表和大小的所有可能排列

    在 python 中使用以下命令很容易计算简单的排列itertools permutations https docs python org 3 library itertools html itertools permutations 你
  • Python 可选参数对

    我正在使用argparse模块获取两个可选的命令行参数 parser add argument start date nargs metavar START DATE help start date in YYYY MM DD parser
  • python lxml 使用iterparse编辑并输出xml

    我已经在 lxml 库上摆弄了一段时间了 也许我没有正确理解它 或者我错过了一些东西 但我似乎无法弄清楚在捕获某个 xpath 后如何编辑文件并且然后能够在逐个元素解析时将其写回到 xml 中 假设我们有这个 xml 作为示例
  • 将带有 md5 消息摘要和 DESede/CBC/PKCS5Padding 的 3DES 加密的 java 代码转换为 python

    我有这个工作java代码 它使用3DES加密对密码进行加密 import java security MessageDigest import java util Arrays import java util Base64 import
  • 在 Qt 5 中嵌入 Python

    我想将 Python 解释器嵌入到 Qt 5 应用程序中 我在 Qt 5 中有一个工作应用程序 但是当我把 include
  • Django - 使 ModelForm(ImageField 的)仅接受某些类型的图像

    我将 Pillow 2 3 0 与 Django 一起使用 并且在 models py 中有一个 ImageField 如下所示 class UserImages models Model user models ForeignKey Us
  • 使用 conda 安装额外功能

    With pip我们可以使用方括号安装子包 例如与阿帕奇气流 https pythonhosted org airflow installation html pip install airflow all 有类似的东西吗conda或者我必
  • 获取 python 模块的 2 个独立实例

    我正在与以非 OO 方式编写的 python 2 x API 进行交互 它使用模块全局范围来处理一些内部状态驱动的东西 在它不再是单例的情况下需要它 并且修改原始代码 不是我们的 不是一个选择 如果不使用单独解释器的子进程运行 有什么方法可
  • 列表中的“u”是什么意思?

    这是我第一次遇到这种情况 刚刚打印了一个列表 每个元素似乎都有一个u在它前面 即 u hello u hi u hey 它是什么意思 为什么列表的每个元素前面都会有这个 由于我不知道这种情况有多常见 如果您想了解我是如何遇到它的 我会很乐意
  • Django INSTALLED_APPS 的命名约定是如何工作的?

    该网站上的教程创建了一个名为 polls 的应用程序 它使用 django 1 9 所以在 INSTALLED APPS 中它是 polls apps PollsConfig 我正在观看一个教程 他将应用程序命名为新闻通讯 并且在 INST
  • 如何输入可变的默认参数

    Python 中处理可变默认参数的方法是将它们设置为无 https stackoverflow com a 366430 5049813 例如 def foo bar None bar if bar is None else bar ret
  • 从单应性估计 R/T

    我一直在尝试计算 2 个图像中的特征 然后将这些特征传递回CameraParams R没有运气 特征已成功计算并匹配 但是问题是将它们传递回R t 我明白你必须分解Homography为了使这一点成为可能 我已经使用如下方法完成了 http
  • 访问影子 DOM 中的元素

    是否有可能查找 Shadow DOM 中的元素与蟒蛇硒 示例用例 我有这个input with type date
  • 具有行业级约束的 SciPy 投资组合优化

    尝试在这里优化投资组合权重分配 通过限制风险来最大化我的回报函数 我可以毫无问题地通过简单的约束 所有权重之和等于 1 找到产生我的回报函数的优化权重 并做出另一个约束 即我的总风险低于目标风险 我的问题是 如何为每个组添加行业权重界限 我
  • scikit-learn kmeans 聚类的初始质心

    如果我已经有一个可以作为初始质心的 numpy 数组 我该如何正确初始化 kmeans 算法 我正在使用 scikit learn Kmeans 类 这个帖子 具有选定初始中心的 k 均值 https stackoverflow com q
  • 具有重复值的 Sqlite 列

    就说专栏吧aSQLite 数据库的非常重复 始终有相同的 4 个值 其他值可能稍后出现 但不同值的数量将少于 1000 个 VALUES hello world it s a shame to store this str many tim

随机推荐

  • tel URI 中的加号是否应该编码?

    在 URI 中 空格可以编码为 既然是这种情况 那么在创建具有国际前缀的 tel URI 时是否应该对前导加号进行编码 哪个更好 两者在实践中都有效吗 a href Call me a a href Call me a No From 第3
  • 如何更改 Microsoft C# 编译器错误消息的语言?

    他们的俄语翻译无效且令人困惑 例如 在某些消息中 语言关键字已被翻译 所以我想查看原始版本 在 develop LINQPad ASP NET 错误等中 UPDATE这个很棒的网站可以通过翻译找到原始的英文错误消息 查找错误网 查看 c w
  • select() 函数的第一个参数到底是什么

    我不太明白第一个参数的目的select功能 维基百科将其描述为所有集合中的最大文件描述符加上 1 为什么 1以及为什么select需要这些信息吗 在 Nix 系统中 文件描述符只是系统表的索引 并且fd set结构包含与这些索引相对应的位掩
  • Javascript RegExp - 从字符串中提取电话号码

    我有以下有效的正则表达式来提取大量不同格式的电话号码 看这里 http jsfiddle net SB5Ly 4 var regex new RegExp d d d s d 2 g 如果脚本未加载 请按顶部菜单中的 运行 按钮 正如您在示
  • 服务工作者 - 首先网络然后缓存并回退到静态页面

    我想将 Service Worker 添加到我的网站 以便为我的网站用户提供良好的离线体验 网站后端是PHP 我对 Javascript Promise 和 Service Workers 还很陌生 但这是我到目前为止所达到的目标 my 索
  • 发送 HTML 电子邮件会导致电子邮件显示 HTML 源代码(Codeigniter 电子邮件类)

    我在通过 Codeigniter 中的电子邮件类发送电子邮件时遇到问题 在电子邮件中显示源 HTML 代码而不是呈现的 HTML 视图 为了进行测试 我目前在 Windows 上的 XAMPP 上使用 CI 并使用 Gmail SMTP 发
  • C++/Boost 将字符串拆分为多个字符

    一旦我看到一个示例 这可能真的很简单 但是如何概括 boost tokenizer 或 boost split 来处理由多个字符组成的分隔符 例如 用 这些标准分割解决方案似乎都不起作用 boost tokenizer
  • 通过 API 列出 Facebook 群组的成员

    是否可以使用 Facebook API 列出 Facebook 群组的成员 如果是 怎么办 这不再可能了 此边缘已于 2018 年 4 月 4 日弃用 无法再使用
  • ValueError:类的数量必须大于一(python)

    经过时x y in fit 我收到以下错误 回溯 最近一次调用最后一次 文件 C Classify classifier py 第 95 行 位于 train avg test avg cms train model X y ceps pl
  • 如何识别Python中哪个函数调用引发异常?

    我需要确定谁引发异常来处理更好的 str 错误 有办法吗 看看我的例子 try os mkdir valid created dir os listdir invalid path except OSError msg here i wan
  • 为什么曼彻斯特编码中比特率是波特率的一半?

    我认为波特率是符号的速率 如果每个符号包含n位 那么比特率应该是n x baud rate 在以太网 曼彻斯特编码 中 如果比特率是波特率的一半 那么一个符号包含1 2位 据我所知 比特率至少应该不小于符号率 波特率 关于波特率和比特率的关
  • 如何创建带有类别/细分的列表视图?

    我想在 android 中创建 listview 具有以下场景 标题类别 1 项目 1 第2项 第3项 标题类别 2 项目 1 第2项 标题类别 3 项目 1 等等 有人指导我如何实现这一目标吗 任何帮助 将不胜感激 答案的一部分就在那里
  • 在 Windows 上使用 pip 安装 zbar 失败

    我正在尝试安装zbar在我的 Windows x64 机器上 pip install zbar 这就是我得到的 Collecting zbar Using cached zbar 0 10 tar bz2 Installing collec
  • 如何使用坐标将标记移动 100 米

    我有2个坐标 坐标1是一个 人 坐标2是目的地 如何将坐标 1 移近 100 米以靠近坐标 2 这将在 cron 作业中使用 因此仅包含 php 和 mysql 例如 此人位于 51 26667 3 45417 目的地是 51 575001
  • 如何获取Vine视频地址

    I love vinepeek并想让事情变得更好 我有 Vine 链接 例如http vine co v bJqWrOHjMmU 但是这是页面链接 而不是视频 URL 我知道它是新的 但是 Vine 有 API 或者我怎样才能获取视频的 u
  • 为什么 java.util.Observable 不是抽象类?

    我刚刚注意到 java util Observable 是一个具体的类 由于 Observable 的目的是扩展 这对我来说似乎很奇怪 这样做有什么原因吗 I found 本文上面说 observable 是一个具体的类 因此必须预先确定从
  • 为什么 ftell( stdin ) 会导致非法查找错误

    以下代码输出 非法查找 include
  • Node Js 上的 Axios 不会保留请求服务器上的会话,而 PostMan 会保留

    我可以在 PostMan 上执行以下操作 1 POST方法登录公司服务器 2 以登录用户的身份在公司服务器上发出其他请求 我创建了一个nodejs应用程序来与公司服务器进行通信 我正在使用 axios 库进行上述通信 登录公司服务器后 任何
  • 使用 python xlib 全局捕获、忽略和发送按键事件,识别虚假输入

    我想在普通键盘上实现按键和弦 我想我使用 python xlib 为此 程序必须全局吞下所有关键事件 然后才允许它们通过 我当前的测试只是抓住 1 键 如果按下此键 它将调用一个处理程序 该处理程序通过 xtest fake input 将
  • OpenCV Python 中与多个对象的模板匹配

    我正在尝试使用 opencv python 在图像中查找多个模板 根据这个链接 但问题是 为单个对象返回多个位置略有不同的点 像这样的东西 我不想用cv2 minMaxLoc 因为图像中有多个模板 我写了一个删除平仓头寸的函数 但我想知道这