Морфология из 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");