【问题标题】:ImageMagick compare images with API?ImageMagick 将图像与 API 进行比较?
【发布时间】:2015-11-01 22:12:09
【问题描述】:

我有以下代码:

MagickWand *wand = NewMagickWand();
char* cmdargs[] = {
    "compare",
    "receipt-expected.png",
    "-metric",
    "psnr",
    "difference.png",
    "difference2.png",
    NULL
};
int argcount = 6;
// Allocate memory for MagickCommand
ImageInfo * info = AcquireImageInfo();
ExceptionInfo* e = AcquireExceptionInfo();
// Execute command
char *metadata = NULL;
MagickBooleanType status = MagickCommandGenesis(info, CompareImageCommand, argcount, cmdargs, &metadata, e);

status 为 0,我认为它可以正常工作,因为它没有错误并且命令在 CLI 中正常工作。

我如何获得它产生的指标? metaNULL

$ compare receipt-expected.png -metric psnr difference.png  difference2.png
15.4169

【问题讨论】:

    标签: image-processing imagemagick


    【解决方案1】:

    理想情况下,您应该直接访问 API,而不是尝试将新的 ImageMagick 进程作为子进程调用。

    MagickWand * alpha, * beta, * result;
    // ... Allocated & Init `alpha' & `beta'
    double metric;
    result = MagickCompareImages(alpha,
                                 beta,
                                 PeakSignalToNoiseRatioMetric,
                                 &metric);
    printf("psnr = %f\n", metric);
    

    我如何获得它产生的指标?

    您不能,因为metadata 旨在将额外的 IO 信息保存在堆中。在这种情况下,写入char ** metadata 的任何信息都将在内部命令写入标准输出后立即销毁。参考here

    【讨论】:

    • 公制百分比有差异吗?
    猜你喜欢
    • 2019-07-07
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-28
    • 2019-04-16
    • 2016-10-02
    • 1970-01-01
    相关资源
    最近更新 更多