Я работаю над проектом предварительной обработки изображений в моем университете и использовал скрипт Magick для очистки фона изображения. Теперь я хочу получить тот же вывод через Magick ++ (API C ++ для imageMagick).
Команда ImageMagick: «convert -respect-круглые скобки (INPUT_IMAGE.jpg -colorspace grey -contrast-stretch 0) (-clone 0 -colorspace grey -negate -lat 25×25 + 30% -contrast-stretch 0) -compose copy_opacity -composite -fill white -opaque нет -альфа от-задний белый OUTPUT_IMAGE.jpg «
Я попытался преобразовать этот код в код Magick ++ и потерпел неудачу в позициях «-lat», «-contrast-stretch» и «-compose».
Это мой код на C ++:
Image backgroungImage;
backgroungImage.read("INPUT_IMAGE.jpg");
backgroungImage.colorSpace(GRAYColorspace);
backgroungImage.type(GrayscaleType);
backgroungImage.contrastStretch(0, QuantumRange);
backgroungImage.write("Partial_output.jpg");
Если у кого-то есть идея или лучшее решение, пожалуйста, дайте мне знать.
Спасибо заранее.
Вы на правильном пути с -contrast-stretch
, За -lat
Помните, что это аббревиатура от «Local Adaptive Threshold». Таким образом, код C ++ будет выглядеть так …
Image backgroundImage;
// INPUT_IMAGE.jpg
backgroundImage.read("INPUT_IMAGE.jpg");
// -colorspace gray
backgroundImage.colorSpace(GRAYColorspace);
// -contrast-stretch 0
backgroundImage.contrastStretch(0, QuantumRange);
// -clone 0
Image foregroundImage(backgroundImage);
// -negate
foregroundImage.negate();
// -lat 25x25+30%
foregroundImage.adaptiveThreshold(25, 25, QuantumRange * 0.30);
// -contrast-stretch 0
backgroundImage.contrastStretch(0, QuantumRange);
// -compose copy_opacity -composite
backgroundImage.composite(foregroundImage, 0, 0, CopyAlphaCompositeOp);
// -fill white -opaque none
backgroundImage.opaque(Color("NONE"), Color("WHITE"));
// -alpha off
backgroundImage.alpha(false);
// -background white
backgroundImage.backgroundColor(Color("WHITE"));
// OUTPUT_IMAGE.jpg
backgroundImage.write("OUTPUT_IMAGE.jpg");
Надеюсь, это поможет!
Других решений пока нет …