首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Magick++模糊掩模

Magick++模糊掩模
EN

Stack Overflow用户
提问于 2016-01-07 09:17:13
回答 2查看 329关注 0票数 0

我试图将模糊掩码的ImageMagick命令转换为Magick++ API。

ImageMagick

代码语言:javascript
复制
convert -size 720x478 xc: -sparse-color Barycentric '0,0 black 0,%h white' -function polynomial 4,-4,1 -level 0,50% mask.jpg

Magick++

代码语言:javascript
复制
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], ' ');

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

谁能给我看看我的错误吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-08 07:27:56

因此,我在sparseColor()函数中给出了错误的sparseColor()DefaultChannels枚举包含带有OpacityChannelIndexChannelRGBChannels。我不得不按位操作将后两者排除在DefaultChannels枚举之外。正如@ThorngardSO所指出的,args的大小也需要10。

代码语言:javascript
复制
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 & ~OpacityChannel) & ~IndexChannel, Magick::BarycentricColorInterpolate, 10, args);
票数 0
EN

Stack Overflow用户

发布于 2016-01-07 09:44:17

Mhm,我对imagemagick没有经验,但是快速查看文档,在您的示例中,我有一个预感:可能默认的图像类型是rgb,在稀疏颜色调用中,每种颜色都需要三个浮动/双参数。就像这样:

代码语言:javascript
复制
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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34651271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档