我想删除图像的白色背景并将其另存为另一个图像。 我编写了一个代码来提取背景,但它留下了一些像素值。 结帐原始图片:
它仍留下一定量的白色背景。
我也想删除它。
这是我的代码:
db.visitors.aggregate([
{
$project: {
activities: {
$setUnion: ['$activities.visits', '$activities.purchases'],
}
}
},
{
$project:{
activites: {
$slice: ["$activities", 0, 2]
}
}
}
])
// Widht Removal ...
int x1=0;
int y1=0;
boolean res = false;
System.out.println("in formatImage");
//高度去除
for (int x = 0; x <= w-1; x++) {
for (int y = 0; y <= h-1; y++) {
if(new Color(bi1.getRGB(x, y)).getRGB()==-1)
{res=false;}
else if (!new Color(bi1.getRGB(x, y)).equals(Color.WHITE)) {
res = true;
}
if (res) {
for (int p = y; p <= h-1; p++) {
b21.setRGB(x1,p,new Color(bi1.getRGB(x, p)).getRGB());
}
x1++;
res = false;
break;
}
}
}
b21=new BufferedImage(x1,h,BufferedImage.TYPE_INT_RGB);
x1=0;
for (int x = 0; x <= w-1; x++) {
for (int y = 0; y <= h-1; y++) {
if(new Color(bi1.getRGB(x, y)).getRGB()==-1)
{res=false;}
else if (!new Color(bi1.getRGB(x, y)).equals(Color.WHITE)) {
res = true;
}
if (res) {
for (int p = 0; p <= h-1; p++) {
b21.setRGB(x1,p,new Color(bi1.getRGB(x, p)).getRGB());
}
x1++;
res = false;
break;
}
}
}
b31有最终影像。
答案 0 :(得分:2)
答案 1 :(得分:1)
正如吉姆所说, 身体附近的颜色不是纯白色。 所以你修改了你的代码的以下声明&amp;它会对你有用。 替换以下命令行
if (!new Color(b21.getRGB(x, y)).equals(Color.WHITE))
通过
if (new Color(b21.getRGB(x, y)).getRGB()<-1000000)
这将为您提供所需的输出。 你可以改变白色和白色的色调。灰色从-1000000到-2000000
答案 2 :(得分:0)
我确实创建了一个将白色背景转换为透明背景的功能
public Image makeWhiteBGToTransparent(final BufferedImage im) {
final ImageFilter filter = new RGBImageFilter() {
public int markerRGB = 0xFFFFFFFF;
public final int filterRGB(final int x, final int y, final int rgb) {
if ((rgb | 0xFF000000) == markerRGB) {
return 0x00FFFFFF & rgb;
} else {
return rgb;
}
}
};
final ImageProducer ip = new FilteredImageSource(im.getSource(), filter);
return Toolkit.getDefaultToolkit().createImage(ip);
}
现在,如果我们要将Image
转换为BufferedImage
,请使用此功能
public BufferedImage toBufferedImage(Image img) {
if (img instanceof BufferedImage) {
return (BufferedImage) img;
}
BufferedImage bImage = new BufferedImage(img.getWidth(null), img.getHeight(null),
BufferedImage.TYPE_INT_ARGB);
Graphics2D bGr = bImage.createGraphics();
bGr.drawImage(img, 0, 0, null);
bGr.dispose();
return bImage;
}