c++ - Magick++ 模糊蒙版

标签 c++ image-processing imagemagick blur magick++

我正在尝试将用于模糊蒙版的 ImageMagick 命令转换为 Magick++ API。

ImageMagick:

convert -size 720x478 xc: -sparse-color Barycentric '0,0 black 0,%h white' -function polynomial 4,-4,1 -level 0,50% mask.jpg

魔法++:

Magick::Image mask(Magick::Geometry(720,478), Magick::Color("white"));

double args[6];
args[0] = 0;
args[1] = 0;
args[2] = 0;
args[3] = 0;
args[4] = mask.rows();
args[5] = MaxRGB;

mask.sparseColor(Magick::DefaultChannels, Magick::BarycentricColorInterpolate, 6, args);

args[0] = 4;
args[1] = -4;
args[2] = 1;
args[3] = 0;
args[4] = 0;
args[5] = 0;

mask.quantumOperator(Magick::DefaultChannels, Magick::PolynomialFunction,
    3,args);

parseLevel(image, "0,50%", args); // contains code from mogrify.c for parsing the leveling string

mask.level(args[0], args[1], args[2], ' ');

我得到的结果只是一个白色图像,而正确的蒙版图像应该是这样的:

enter image description here

有人可以告诉我我的错误吗?

最佳答案

嗯,我没有使用 imagemagick 的经验,但是快速查看文档和您的示例,我有一种预感:也许默认图像类型是 rgb,并且您需要为稀疏图像中的每种颜色提供三个浮点/ double 参数-颜色调用。像那样:

Magick::Image mask(Magick::Geometry(720,478), Magick::Color("white"));

double args[10];

// -sparse-color Barycentric '0,0 black 0,%h white' 

args[0] = 0;           // x = 0
args[1] = 0;           // y = 0
args[2] = 0;           // black (R)
args[3] = 0;           // black (G)
args[4] = 0;           // black (B)
args[5] = 0;           // x = 0
args[6] = mask.rows(); // y = %h
args[7] = MaxRGB;      // white (R)
args[8] = MaxRGB;      // white (G)
args[9] = MaxRGB;      // white (B)

mask.sparseColor(Magick::DefaultChannels, Magick::BarycentricColorInterpolate, 10, args);

关于c++ - Magick++ 模糊蒙版,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34651271/

相关文章:

php - 增加 Imagicks 最大分辨率

ruby-on-rails - ImageMagick/Paperclip - Paperclip 在大型作业期间失败

colors - 使用预定义的颜色代码将 jpg 转换为 png?

c++ - 使用 join() 从不同范围运行 C++ 线程

c++ - 使用 OpenCV 进行手部检测

c++ - 从数据库填充 QTreeView 作为父节点和子节点

python - 如何使用python从视频中提取幻灯片

android - Android 上的硬币识别

c++ - winapi中保存位图问题

c++ - 是否可以将实现模板特化定义为另一种类型的 typedef?