Морфология из Magick++ для соответствия командной строке

Я пытаюсь продублировать командную строку ImageMagick:

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

через Magick++ в C++ (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 ответа

Решение

Для выполнения этих операций в Magick++ потребовалось бы много утомительных шагов, на которые у меня нет документации. Создание ядра особенно сомнительно, так как получилось 13x13.

Я нашел другой способ достижения той же цели: использовать MagickCore::ConvertImageComand(). Параметры совпадают с версией командной строки, а выходные данные совпадают. Использование команды из C++, кажется, работает без проблем...

используя пространство имен Magick;
char * args [] = {"convert", "In.jpg", "(", "- смещение","50%","- морфология", "свернуть", "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);

Я бы предпочел, чтобы эта операция приводила к буферу или образу в памяти, а не к записи на диск, но я предполагаю, что это другой вопрос...

Следующая версия 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");
Другие вопросы по тегам