使用 Python/PIL 比较(相似)图像

2024-04-21

我正在尝试计算相似 (read: 编辑距离)的两个图像,使用 Python 2.6 和 PIL。

我计划使用python-levenshtein http://pypi.python.org/pypi/python-Levenshtein/0.10.1用于快速比较的库。

主要问题:

比较图像的好策略是什么?我的想法是这样的:

  • 转换为 RGB(透明 -> 白色)(或者可能转换为单色?)
  • 将较小的尺寸放大到较大的尺寸
  • 将每个通道(= 唯一通道,如果转换为单色)转换为序列(项目值 = 像素的颜色值)
  • 计算两个序列之间的编辑距离

当然,这不会处理镜像、裁剪图像等情况。但对于基本比较,这应该很有用。

是否有更好的策略记录在某处?

EDIT:Aaron H 关于速度问题的看法是正确的。对于大于几百乘几百像素的图像,计算 Levelshtein 大约需要很长时间。然而,在我的示例中,缩小到 100x100 和 200x200 后的结果之间的差异小于 1%,因此将最大图像尺寸设置为 ~100px 左右可能是明智的...

EDIT:谢谢前奏曲和赋格,这个问题就是我一直在寻找的。

顺便说一句,编辑距离似乎可以优化,但它给了我一些非常糟糕的结果,也许是因为背景中有很多冗余元素。必须看看其他一些算法。

EIDT:均方根偏差和峰值信噪比似乎是另外两个选项,实现起来并不困难,而且 CPU 成本似乎也不是很高。然而,我似乎需要某种上下文分析来识别形状等。

不管怎样,感谢所有链接,也感谢您指出 NumPy/SciPy 的方向。


查看imgSeek http://www.imgseek.net/:

imgSeek 是一个免费开源视觉相似度集合 项目。查询(您正在寻找的图像)可以表达 可以是用户绘制的草图,也可以是您绘制的另一幅图像 供应(或您收藏中的图像)。搜索算法使得 使用多分辨率小波分解查询和数据库 图片。

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

使用 Python/PIL 比较(相似)图像 的相关文章

  • Django 代理模型的继承和多态性

    我正在开发一个我没有启动的 Django 项目 我面临着一个问题遗产 我有一个大模型 在示例中简化 称为MyModel这应该代表不同种类的物品 的所有实例对象MyModel应该具有相同的字段 但方法的行为根据项目类型的不同而有很大差异 到目
  • 在 python 程序中合并第三方库的最佳实践是什么?

    下午好 我正在为我的工作编写一个中小型Python程序 该任务需要我使用 Excel 库xlwt and xlrd 以及一个用于查询 Oracle 数据库的库 称为CX Oracle 我正在通过版本控制系统 即CVS 开发该项目 我想知道围
  • Python 的键盘中断不会中止 Rust 函数 (PyO3)

    我有一个使用 PyO3 用 Rust 编写的 Python 库 它涉及一些昂贵的计算 单个函数调用最多需要 10 分钟 从 Python 调用时如何中止执行 Ctrl C 好像只有执行结束后才会处理 所以本质上没什么用 最小可重现示例 Ca
  • SQLAlchemy 通过关联对象声明式多对多自连接

    我有一个用户表和一个朋友表 它将用户映射到其他用户 因为每个用户可以有很多朋友 这个关系显然是对称的 如果用户A是用户B的朋友 那么用户B也是用户A的朋友 我只存储这个关系一次 除了两个用户 ID 之外 Friends 表还有其他字段 因此
  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • 为 Anaconda Python 安装 psycopg2

    我有 Anaconda Python 3 4 但是每当我运行旧代码时 我都会通过输入 source activate python2 切换到 Anaconda Python 2 7 我的问题是我为 Anaconda Python 3 4 安
  • 使用 matplotlib 绘制时间序列数据并仅在年初显示年份

    rcParams date autoformatter month b n Y 我正在使用 matpltolib 来绘制时间序列 如果我按上述方式设置 rcParams 则生成的图会在每个刻度处标记月份名称和年份 我怎样才能将其设置为仅在每
  • 使用 on_bad_lines 将 pandas.read_csv 中的无效行写入文件

    我有一个 CSV 文件 我正在使用 Python 来解析该文件 我发现文件中的某些行具有不同的列数 001 Snow Jon 19801201 002 Crom Jake 19920103 003 Wise Frank 19880303 l
  • 根据列值突出显示数据框中的行?

    假设我有这样的数据框 col1 col2 col3 col4 0 A A 1 pass 2 1 A A 2 pass 4 2 A A 1 fail 4 3 A A 1 fail 5 4 A A 1 pass 3 5 A A 2 fail 2
  • 如何从网页中嵌入的 Tableau 图表中抓取工具提示值

    我试图弄清楚是否有一种方法以及如何使用 python 从网页中的 Tableau 嵌入图形中抓取工具提示值 以下是当用户将鼠标悬停在条形上时带有工具提示的图表示例 我从要从中抓取的原始网页中获取了此网址 https covid19 colo
  • 测试 python Counter 是否包含在另一个 Counter 中

    如何测试是否是pythonCounter https docs python org 2 library collections html collections Counter is 包含在另一个中使用以下定义 柜台a包含在计数器中b当且
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • BeautifulSoup 中的嵌套标签 - Python

    我在网站和 stackoverflow 上查看了许多示例 但找不到解决我的问题的通用解决方案 我正在处理一个非常混乱的网站 我想抓取一些数据 标记看起来像这样 table tbody tr tr tr td td td table tr t
  • Flask如何获取请求的HTTP_ORIGIN

    我想用我自己设置的 Access Control Allow Origin 标头做出响应 而弄清楚请求中的 HTTP ORIGIN 参数在哪里似乎很混乱 我在用着烧瓶 0 10 1 以及HTTP ORIGIN似乎是这个的特点之一object
  • IO 密集型任务中的 Python 多线程

    建议仅在 IO 密集型任务中使用 Python 多线程 因为 Python 有一个全局解释器锁 GIL 只允许一个线程持有 Python 解释器的控制权 然而 多线程对于 IO 密集型操作有意义吗 https stackoverflow c
  • 如何在seaborn displot中使用hist_kws

    我想在同一图中用不同的颜色绘制直方图和 kde 线 我想为直方图设置绿色 为 kde 线设置蓝色 我设法弄清楚使用 line kws 来更改 kde 线条颜色 但 hist kws 不适用于显示 我尝试过使用 histplot 但我无法为
  • 每个 X 具有多个 Y 值的 Python 散点图

    我正在尝试使用 Python 创建一个散点图 其中包含两个 X 类别 cat1 cat2 每个类别都有多个 Y 值 如果每个 X 值的 Y 值的数量相同 我可以使用以下代码使其工作 import numpy as np import mat
  • Conda SafetyError:文件大小不正确

    使用创建 Conda 环境时conda create n env name python 3 6 我收到以下警告 Preparing transaction done Verifying transaction SafetyError Th
  • 使用 Python 的 matplotlib 选择在屏幕上显示哪些图形以及将哪些图形保存到文件中

    我想用Python创建不同的图形matplotlib pyplot 然后 我想将其中一些保存到文件中 而另一些则应使用show 命令 然而 show 显示all创建的数字 我可以通过调用来避免这种情况close 创建我不想在屏幕上显示的绘图
  • Statsmodels.formula.api OLS不显示截距的统计值

    我正在运行以下源代码 import statsmodels formula api as sm Add one column of ones for the intercept term X np append arr np ones 50

随机推荐

  • 在 WPF 窗口上加载多个 UserControls

    我有一个窗口 在其中加载一个用户控件 例如 Control1 现在 如果用户单击某个新的 UserControl 按钮 Control2 应该加载到窗口上 而 Control1 应该消失 同样 当用户单击下一个 UserControl 的按
  • PyTorch 中复数矩阵的行列式

    有没有办法在 PyTorch 中计算复矩阵的行列式 torch det未针对 ComplexFloat 实现 不幸的是 目前尚未实施 一种方法是实现您自己的版本或简单地使用np linalg det 这是一个简短的函数 它计算我使用 LU
  • 如何在plotly 3D曲面图中标记区域?

    我使用plotly从xyz数据创建3D高程剖面图 它与以下代码配合得很好 import plotly graph objects as go import pandas as pd import numpy as np Read data
  • PHP DOM:按标签名称获取元素

    我担心这是一个非常愚蠢的问题 但在过去两个小时尝试了大量组合后 我真的陷入了困境 我正在尝试从 XML 文件中提取 NAME 我的 XML 文件
  • numpy bincount 可以处理二维数组吗?

    我看到 numpy bincount 的行为我无法理解 我想以行方式将值存储在二维数组中 并查看下面的行为 为什么它可以与 dbArray 一起使用 但与 simarray 一起失败 gt gt gt dbArray array 1 0 1
  • JavaFX 2.2 不可见节点的鼠标事件

    我正在尝试接收 JavaFX 2 2 中不可见节点的 MouseEvents 将其视为一个交互式但不可见的区域 例如当鼠标悬停在其上时应触发操作 问题是 这不是静态定义的区域 而是有多个区域 很多 可以由应用程序移动和调整大小 因此 对于我
  • UITableView 检测最后一个单元格

    我怎样才能检测到UITableView已滚动到底部以便最后一个单元格可见 Inside tableView cellForRowAtIndexPath or tableView willDisplayCell forRowAtIndexPa
  • 如何增加 MVC 3 中的会话超时

    我有一个 ASP NET MVC 3 Razor 应用程序 并且经常遇到会话超时 有没有办法增加Session的价值 您没有提供足够的详细信息 例如您的配置 问题描述等 更确切地说发生了什么 这篇文章可能会有所帮助 ASP NET MVC3
  • 在 PyDev 中运行 Twisted 应用程序

    我想使用 Eclipse 3 5 2 PyDev 模块 1 6 4 和 Python 2 6 5 调试 Twisted 应用程序 10 0 0 要从命令行运行应用程序 我将指定以下内容 c python26 python c python2
  • 将填充设置为动态文本框 C# asp.net

    这是我从 C 代码创建文本框的代码 for int x 0 x lt 30 x TextBox txt new TextBox txt ID txt x ToString data Controls Add txt data Control
  • 为什么 GAE 启动第二个实例并将“最大空闲实例数”设置为 1

    我使用 Google App Engine 且计费状态已启用 空闲实例设置为 1 1 由于我的服务只有 2 个客户 有时我会看到第二个实例 问题是启动新实例需要 15 秒 spring 和 co 80 Mb 内存对于一个实例来说太高了 新实
  • 安装 debugger-linecache (1.1.1) 时出错,Bundler 无法继续

    知道如何解决这个问题吗 Gem Installer ExtensionBuildError ERROR Failed to build gem native extension home durrantm rvm rubies ruby 1
  • Razor 不理解未封闭的 html 标签

    使用 RazorViewEngine 我可以这样做 if somecondition div some stuff div 但我似乎无法做到这一点 剃刀感到困惑 if somecondition div if someothercondit
  • 在 python 中,如何从日期和时间创建时区感知日期时间?

    在 Python 中 假设我的日期是 2016 年 12 月 25 日 如何创建该日期中午的时区感知日期时间 如果它与 Django 的时区处理兼容 那就加分了 诀窍是首先combine将天真的时间和日期转换为天真的日期时间 然后可以将此原
  • 正则表达式执行仅返回第一个匹配项[重复]

    这个问题在这里已经有答案了 我正在尝试实现以下找到的正则表达式搜索Golfscript 语法页面 http www golfscript com golfscript syntax html var ptrn a zA Z a zA Z0
  • Java 中的 syso 语句是什么意思?

    什么是syso statements在Java中代表什么 短缺System out println In eclipse you can type syso and Ctrl Space to fill out the expansion
  • 有没有更好的方法将文件的完整内容写入 OutputStream?

    当我想将文件的全部内容写入OutputStream 我通常分配一个缓冲区作为byte 然后做一个for循环到read来自文件的数据InputStream写入缓冲区并将缓冲区内容写入OutputStream 直到InputStream没有更多
  • 如何点击cypress中的链接

    如何使用 cypress 单击此链接 a href class button span class icon icon chevron down span span class screen reader only chevron down
  • 错误 1062。mysql 中的重复条目

    我有一个 MySQL 表 其架构中的列 1 是主键 我有一个 tsv 文件 需要将其插入到该表中 现在 tsv 具有主键重复 因此当我尝试将其插入 MySQL 表时 会出现错误 ERROR 1062 23000 Duplicate entr
  • 使用 Python/PIL 比较(相似)图像

    我正在尝试计算相似 read 编辑距离 的两个图像 使用 Python 2 6 和 PIL 我计划使用python levenshtein http pypi python org pypi python Levenshtein 0 10