1

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

由于我是 Marvin 的新手,因此更改背景让我很麻烦。我还尝试了用于 java 的 opencv,但它给出了不满意的链接错误。

图片示例:

在此处输入图像描述

4

1 回答 1

3

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

算法:

  1. 给定灰度阈值,将图像转换为二进制颜色模型(像素为真或假)。
  2. 执行形态膨胀以关闭鞋子边界中的开口。
  3. 用颜色 rgb(255,0,255) 填充背景
  4. 在二值图像中用新颜色填充背景后,将原始图像中的相同像素设置为白色。

输出:

在此处输入图像描述

源代码:

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);
    }
}
于 2016-06-29T11:37:24.093 回答