我有以下代码:
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中正常工作。
如何获得已生成的指标? meta
为NULL
。
$ compare receipt-expected.png -metric psnr difference.png difference2.png
15.4169
答案 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以供参考。