1

我有一个下面的 CLI 并尝试使用 magickwand c 达到相同的结果。一切似乎都很完美,或者不知道我可能错过了什么,但 MagickUnsharpMaskImage 对我不起作用。检查我的源代码。我还附上了由 CLI 和 C API 生成的源图像和两个输出图像。

命令行界面

convert testsharp.jpg -unsharp 0x1 unsharpC.jpg

C代码

int main(int argc, char const *argv[]) {
    MagickWand * wand;
    wand = NewMagickWand();
    MagickReadImage(wand, "testsharp.jpg");
    MagickUnsharpMaskImage(wand, 0.0, 1.0, 0.0, 0.0);
    MagickWriteImage(wand, "unsharpW.jpg");
    return 0;
}

源图像

在此处输入图像描述

使用 CLI 输出图像

在此处输入图像描述

使用 C 输出图像

在此处输入图像描述

ImageMagick 版本

版本:ImageMagick 7.0.5-5 Q16 x86_64 2017-05-23 http://www.imagemagick.org

4

1 回答 1

2

来自男人

MagickUnsharpMaskImage()锐化图像。我们将图像与给定半径和标准偏差 (sigma) 的高斯算子进行卷积。为了获得合理的结果,半径应大于 sigma。使用半径 0 并UnsharpMaskImage()为您选择合适的半径。

强调我的

你称它为传递radius=0 sigma=1.0

此外,这些参数的默认值是

  1. radius高斯的半径,以像素为单位,不包括中心像素(默认为 0)。
  2. sigma高斯的标准偏差,以像素为单位(默认为 1.0)
  3. 增益原始图像和添加回原始图像的模糊图像之间的差异分数(默认为 1.0)
  4. threshold 阈值,作为 QuantumRange 的一部分,需要应用差异量(默认 0.05)

代码更正为

MagickUnsharpMaskImage(wand, 0.0, 1.0, 1.0, 0.05);
于 2017-05-25T12:52:26.170 回答