【问题标题】:Does Processing transparency support removing backgrounds?处理透明度是否支持去除背景?
【发布时间】:2020-10-04 09:15:08
【问题描述】:

我有一张绿色背景的图片。

我用这个功能去除了背景。

public void removeBackground(PImage img, color c, float thres) {
  colorMode(HSB);
  for(int i = 0; i < img.width; i++){
    for(int j = 0; j < img.height; j++){
      color cp = img.get(i, j);
      //threshold accounts for compression
      if(abs(hue(cp) - hue(c)) < thres){
        img.set(i, j, color(0,0,0,0));
      }
    }
  }
}

使用这些参数,我尝试移除背景。

PImage FBSprite;
public void settings() {
  size(500, 500);
}

void setup(){
  FBSprite = loadImage("FlappyBirdSprite.jpg");
  FBSprite.resize(50, 0);
  removeBackground(FBSprite, FBSprite.get(0,0), 0.5);
  image(FBSprite, 0, 0);
}

void draw(){
  background(200);
  image(FBSprite, 0, 0);
}

背景变为黑色而不是透明。

ARGB 结果:

具有 1 个 alpha 的 HSB 结果:

【问题讨论】:

    标签: java image image-processing processing


    【解决方案1】:

    你会喜欢这个的:改变这一行

    colorMode(HSB);
    

    为此:

    colorMode(ARGB);
    

    它应该可以解决问题。刚刚发生了什么?除非您需要在那个特定的时间点在 HSB 工作,否则没有任何意义。 ARGB 与 RGB 类似,但它具有 ALPHA 设置,如果您愿意,也可以设置为透明度。好像你已经准备好在 ARGB 中工作了,因为你设置了 color(0,0,0,0) 这样,所以这可能是一个 copy and paste programming 问题。或者,也许你只是没有注意到。它一直发生在我身上。但是,如果这是第一件事,请尝试在未来密切关注此类问题。除了大家都知道的意大利面条式代码之外,大多数人不会谈论其他糟糕的设计模式,但cut and paste programming 是真实存在的,而且很痛苦,特别是如果您使用一些不存在文档的内部平台。并不是说它发生在我身上。

    玩得开心!

    【讨论】:

    • 我尝试使用 ARGB 颜色模式,但边框不是完全透明的。
    • 我想我们可能会看到不同的东西。你能给我看一下你的结果的屏幕截图吗?
    • 添加了有问题的图片。
    【解决方案2】:

    我没有将要移除的像素的 alpha 设置为 0,而是将 alpha 设置为 1。alpha 太小以至于看不到边框。

    【讨论】:

      猜你喜欢
      • 2016-02-19
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-29
      • 2021-11-03
      • 1970-01-01
      • 2022-01-23
      相关资源
      最近更新 更多