如何使用 ImageMagick API 在 C++ 中比较图像?

How to use the ImageMagick API to compare images in C++?

如何做相当于命令行的操作

compare bag_frame1.gif bag_frame2.gif  compare.gif

在 C++ 中使用 Magick++ API?我想在 C++ 代码中比较或查找相同尺寸的两个图像的相似性,而不是使用命令行。

任何示例代码片段将不胜感激。

我想你在这里有答案:http://www.imagemagick.org/discourse-server/viewtopic.php?t=25191

图像存储在 Image class which has a compare member function. The first link 中有一个关于如何使用它的示例,图像文档有一个关于如何使用的很好的示例 Image

我相信 Magick::Image.compare 是您正在寻找的方法。您的应用程序可以使用三种方法签名。

  • Bool 判断是否有差异。
  • 双倍 基于公制的失真量。
  • 图像 作为新的突出显示图像的结果差异。

例如...

#include <Magick++.h>

int main(int argc, const char * argv[]) {

    Magick::InitializeMagick(argv[0]);

    Magick::Geometry canvas(150, 150);
    Magick::Color white("white");

    Magick::Image first(canvas, white);
    first.read("PATTERN:FISHSCALES");
    Magick::Image second(canvas, white);
    second.read("PATTERN:GRAY70");

    // Bool to evaluate if there's a difference.
    bool isIdentical = first.compare(second);

    // Double distortion amount based on metric.
    double metricDistortion = first.compare(second, Magick::AbsoluteErrorMetric);

    // Image resulting difference as a new highlight image.
    double distortion = 0.0;
    Magick::Image result = first.compare(second, Magick::AbsoluteErrorMetric, &distortion);

    return 0;
}

第三个例子是满足命令行需要的方法

compare bag_frame1.gif bag_frame2.gif  compare.gif