我被建议将这个问题与另一个问题分开。这是原文:
经过一些图像处理后,我得到了一个二值图像,但边界太硬了,所以我应用了一个高斯滤波器来得到一个软的。结果是灰度图像。我需要将此图像应用为另一个图像的遮罩,它们都没有 alpha 通道,因此需要在没有此值的情况下混合颜色。我正在使用Marvin 框架来完成这项工作,但 Marvin 没有插件,所以我编写了一个,就是这样:
@Override public void process(MarvinImage _imageIn, MarvinImage _imageOut, MarvinAttributes attrOut, MarvinImageMask _mask, boolean previewMode) {
MarvinImage mask = _imageIn;
MarvinImage image = _imageOut;
for(int y=0; y<mask.getHeight(); y++){
for(int x=0; x<mask.getWidth(); x++){
//ya que está en grayscale, los 3 valores son los mismos
int r1 = mask.getIntComponent0(x, y);
int g1 = mask.getIntComponent1(x, y);
int b1 = mask.getIntComponent2(x, y);
int r2 = image.getIntComponent0(x, y);
int g2 = image.getIntComponent1(x, y);
int b2 = image.getIntComponent2(x, y);
//al color de salida, le asignamos la luminicencia de la imagen mascara
int r = 0, g = 0, b = 0;
if(r1 > 0 || r2 > 0){
r = r1*r2/Math.max(r1, r2);
}
if(g1 > 0 || g2 > 0){
g = g1*g2/Math.max(g1, g2);
}
if(b1 > 0 || b2 > 0){
b = b1*b2/Math.max(b1, b2);
}
image.setIntColor(x, y, r, g, b);
}
}
}
但是这段代码有一个我无法解决的小错误。当 rgb 图像有白色时,颜色结果没有很好地组合,它不会变暗。我正在寻找的是可以使用 gimp 实现的东西,其中有 2 层图像,底部是 rgb 图像,上层是灰度蒙版,然后在这一层中我们使用函数 color to alpha,使用白色作为目标。结果如下:
Whit算法是下一个:
区别非常明显。这是用于测试的两个原始图像:
(来源:imgsafe.org)