Magick ++的形态学与命令行转换相匹配

时间:2014-02-10 19:24:09

标签: c++ imagemagick imagemagick-convert

我正在尝试复制ImageMagick命令行:

Convert In.jpg ( -bias 50% -morphology Convolve LoG:0x1.5 ) Out.jpg

通过C ++中的Magick ++(Visual Studio 2010 Express)

我已经读过形态操作不是Magic ++的一部分,所以需要使用 C MagickCore函数。我无法获得匹配(或甚至接近)的输出 ImageMagick命令行输出。

我正在尝试通过

创建内核
k=MagickCore::AcquireKernelInfo("LoG:0x1.5");

并通过

执行形态学
m = MagickCore::MorphologyImage(i, MagickCore::ConvolveMorphology, 3, k, e);

由于缺乏具体信息,我猜测这些方法和参数。 有没有人有关于如何从C ++完成相同输出的指导?

2 个答案:

答案 0 :(得分:0)

要在Magick ++中完成这些操作,需要许多繁琐的步骤,而我没有任何文档。内核创建特别可疑,因为它是13x13。

我找到了另一种实现相同目标的方法:使用MagickCore :: ConvertImageComand()。参数与命令行版本相同,输出相同。使用C ++中的命令似乎没有问题......

使用命名空间Magick;
char * args [] = {“convert”,“In.jpg”,“(”,“ - bias”,“50%”,“ - morphology”,“convolve”,“LoG:0x1.5”,“) “,”Out.jpg“};    int args_count = 10;

MagickCore::ExceptionInfo *exception = MagickCore::AcquireExceptionInfo();
MagickCore::ImageInfo *image_info = MagickCore::AcquireImageInfo();
(void) strcpy(image_info->filename,"In.jpg");
image = MagickCore::ReadImage(image_info, exception);
  MagickBooleanType status =
   ConvertImageCommand(image_info, args_count, args, NULL, exception);

我更希望将此操作结果放在缓冲区或内存中,而不是写入磁盘,但我想这是另一个问题......

答案 1 :(得分:0)

ImageMagick的下一个版本(6.8.8-7)将支持Magick ++ API中的形态学。你的命令:

convert In.jpg -bias 50% -morphology Convolve LoG:0x1.5 Out.jpg

可以这样写:

Magick::Image img;

img.read("In.jpg");
img.artifact("convolve:bias", "50%");
img.morphology(ConvolveMorphology, LoGKernel, "0x1.5");
img.write("Out.jpg");