【问题标题】:Directly comparing two images, when one has an alpha channel?直接比较两张图片,当一张有阿尔法通道时?
【发布时间】:2019-08-06 15:51:57
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: python opencv image-processing python-imaging-library


    【解决方案1】:

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

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

    小图像(无 alpha):

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

    大图:

    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 范围内的分数(在括号中)。它们为零的事实意味着完美匹配。 @ 后面的值是最佳匹配的位置。

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

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

    小图2:

    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
    


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

    【讨论】:

    • 蒙面比较正是我想要的。我想知道以灰度执行模板匹配然后执行我自己的蒙版比较是否会更快,而不是导入另一个库并用彩色完成整个事情。我想这取决于我期待多少次点击。现在我正在提取 alpha 通道并自己进行比较,而不是使用 ImageMagick,但我一定会稍后再看一下,看看这是否能更好地清理事情。
    • OpenCV 模板匹配确实允许匹配彩色图像。你不需要灰度。但我不知道它在模板匹配期间允许屏蔽,即似乎没有可用的屏蔽参数。
    • 实际上,我刚刚发现了一些 OpenCV 3.4 的最新文档,其中确实暗示可以使用掩码。见docs.opencv.org/3.4/de/da9/tutorial_template_matching.html。另见docs.opencv.org/3.4/df/dfb/…
    • 我不知道我是怎么错过这一切的。应该能够让它工作。相比之下,掩蔽仍然会很好,但我可能也错过了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-17
    • 1970-01-01
    • 2019-08-15
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    相关资源
    最近更新 更多