我正在尝试复制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 ++完成相同输出的指导?
答案 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");