gpt4 book ai didi

python - 直接比较两张图像,当一张有 alpha channel 时?

转载 作者:行者123 更新时间:2023-12-02 17:04:12 27 4
gpt4 key购买 nike

基本上我有两张图片;一张小图片(我称之为图片 1)和屏幕截图。我一直在使用 Python 和 OpenCV 在屏幕上搜索 Image 1 的实例,特别是 cv2.matchTemplate 函数。

问题是,据我了解,matchTemplate 要求图像是灰度的。所以为了保证图片是一样的,我把Image 1和截图都灰度化,用​​matchTemplate找实例,然后和Image 1比较结果,保证颜色匹配。

所以这就是问题所在; OpenCV 有一个比较函数,看起来它可以完成最终比较;但是图像 1 基本上是一个 Sprite ,并且具有相关的 alpha 信息,并且 compare 似乎只是简单地执行两个多维数组的元素比较。屏幕截图没有 Alpha channel ,因此两者无法进行比较,因为它们的大小不同。此外,我不能只在截屏图像中添加 alpha,因为最终我并不想比较 alpha channel ,我试图忽略像素 比较期间的 Alpha channel 。

所以基本上我想知道;
a)如果可以使用 matchTemplate 或类似的东西来使用彩色图像搜索屏幕,或者 b)如果已经在某处编写了比较函数,该函数仅比较图像在渲染时可见的图像。

如果您需要我正在讨论的视觉示例,我将创建一个 Imgur 帐户。

最佳答案

我不太了解 OpenCV。但是你可以在 ImageMagick 中做到这一点,尽管它不如 OpenCV 快。它适用于彩色图像,而不仅仅是灰度图像。

ImageMagick 7 可以进行蒙版比较(从一张图像的 Alpha channel 中提取蒙版)。 ImageMagick 有许多用于比较模板匹配的相关指标,包括 rmse(均方根误差)和 ncc(归一化互相关)。

小图像(无 alpha):

enter image description here

蒙版图像(从 alpha 中提取):

enter image description here

大图:

enter image description here

magick compare -metric rmse -subimage-search -dissimilarity-threshold 1 large.png \( -read-mask small_mask.png small.png \) diff.png

0 (0) @ 417,44

这里我使用 rmse 指标。数字 0 (0) 是原始分数(16 位范围)和归一化到 0 到 1 范围内的分数(在括号中)。它们为零的事实意味着完美匹配。 @ 之后的值是最佳匹配的位置。

产生两个输出图像。第一个显示在大图像上以红色突出显示存在差异的地方(在这种情况下没有红色,因为完美匹配)。第二个显示相关表面图像。最亮的像素是最佳匹配发生的地方。

enter image description here

enter image description here

这是我在小图像中添加白线的另一个示例:

小图2:

enter image description here
magick compare -metric rmse -subimage-search -dissimilarity-threshold 1 large.png \( -read-mask small_mask.png small2.png \) diff2.png

4159.53 (0.0634704) @ 417,44

现在您可以在第一个输出图像中看到红线,显示它们在最佳匹配位置的不同之处。请注意,该线仅显示在帽子内部,因为 mask 阻止了相关性使用其黑色区域中的像素。

enter image description here

enter image description here

关于python - 直接比较两张图像,当一张有 alpha channel 时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57379815/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com