ImageMagick将图像与API进行比较?

时间:2015-08-10 05:18:03

标签: image-processing imagemagick

我有以下代码:

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

1 个答案:

答案 0 :(得分:0)

理想情况下,您可以直接访问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以供参考。