c++ - 将图像 magick 命令转换为 magick++ c++ 代码

标签 c++ imagemagick magick++ image-preprocessing

我在我的大学从事图像预处理项目,并使用图像魔术脚本来清理图像背景。现在我想通过 Magick++(imageMagick 的 c++ api)获得相同的输出。

ImageMagick 命令:"convert -respect-parenthesis ( INPUT_IMAGE.jpg -colorspace gray -contrast-stretch 0 ) ( -clone 0 -colorspace gray -negate -lat 25x25+30% -contrast-stretch 0 ) - compose copy_opacity -composite -fill white -opaque none -alpha off -background white 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");

希望对您有所帮助!

关于c++ - 将图像 magick 命令转换为 magick++ c++ 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43626936/

相关文章:

c# - 我们可以以编程方式比较具有相同分辨率的不同图像吗?

c++ - 在 magick++ api 中调整大小的默认过滤器类型

c++ - 函数不能访问同一类中定义的对象..!可能是一个错误?

c++ - Native Messaging 主机无法发送 1 MB 数据

ffmpeg - 从命令行使半个图像透明

ruby - Rmagick,GraphicsMagick 在服务器上似乎 super 慢(为什么在本地可以)

c++ - 如何使用C++ API在HDF5文件中写入/读取锯齿状阵列?

c++ - I2C 文件描述符上的 I2C 总线可写/可读标志

c++ - 在 Code::Blocks 中编译 magick++ 东西