如何将图像背景更改为白色?

时间:2016-06-29 04:53:25

标签: java image-processing marvin-framework marvinproject

我有一组图像。图像背景简单。我想使用Marvin Framework和Java将背景更改为白色。

因为我是Marvin的新手,所以改变背景让我很麻烦。我也试过opencv for java但它给出了不满意的链接错误。

图片示例:

enter image description here

1 个答案:

答案 0 :(得分:3)

为了获得完美的结果,您需要找到一种去除阴影的方法。但我认为这对你来说是一个很好的起点。

<强>算法:

  1. 在给定灰度阈值的情况下,将图像转换为二进制颜色模型(像素为真或假)。
  2. 进行形态膨胀以封闭鞋边界处的开口。
  3. 用颜色rgb(255,0,255)
  4. 填充背景
  5. 在二进制图像中使用新颜色填充背景后,在原始图像中将相同像素设置为白色。
  6. <强>输出:

    enter image description here

    源代码:

    import static marvin.MarvinPluginCollection.*;
    
    public class RemoveBackground {
    
        public RemoveBackground(){
            MarvinImage image = MarvinImageIO.loadImage("./res/shoes.jpg");
            MarvinImage bin = MarvinColorModelConverter.rgbToBinary(image, 116);
            morphologicalDilation(bin.clone(), bin, MarvinMath.getTrueMatrix(5, 5));
            MarvinImage mask = MarvinColorModelConverter.binaryToRgb(bin);
            boundaryFill(mask.clone(), mask, 5, 5, new Color(255,0,255));
    
    
            for(int y=0; y<mask.getHeight(); y++){
                for(int x=0; x<mask.getWidth(); x++){
                    if(mask.getIntColor(x, y) == 0xFFFF00FF){
                        image.setIntColor(x, y, 255,255,255);
                    }
                }
            }
            MarvinImageIO.saveImage(image, "./res/shoes_out.jpg");
        }
    
        public static void main(String[] args) {
            new RemoveBackground();
            System.exit(0);
        }
    }