0

我有一个 rgb 图像,我想将二进制图像转换为 0-255。

我计算 RGB 图像中的阈值和灰度图像中大于阈值的像素,我设置红色 = 255 绿色 = 255 和蓝色 = 255 并且低于阈值我设置红色 = 0 绿色 = 0 和蓝色 = 0

private static int colorToRGB(int alpha, int red, int green, int blue) {
    int newPixel = 0;
    newPixel += alpha;
    newPixel = newPixel << 8;
    newPixel += red; newPixel = newPixel << 8;
    newPixel += green; newPixel = newPixel << 8;
    newPixel += blue;
    System.out.println("asd"  + newPixel);
    return newPixel;
}

newPixel 的值 -16777216 如果像素是白色 newPixel 的值 -1 如果像素是黑色

alpha 值是常数 255 我哪里错了,因为我想要像素值 0 和 255。

BufferedImage 类型为 TYPE_INT_ARGB

感谢您的帮助

4

3 回答 3

1

老实说,你的问题对我来说没有多大意义。所以我回答你的问题做一些假设:

  1. 你有一个全局阈值 [0-255]
  2. 阈值应应用于灰度值,因此您需要将 rgb 像素转换为灰度值
  3. 该程序应尽可能快
  4. 你想用java做

此函数采用 rgb 颜色和阈值并返回黑色或白色。

public static int treshold(final int sourceColor, final int treshold) {
    // green channel is a good approximation of rgb intensity
    int green = (sourceColor >> 8) & 0xFF;
    if (green < treshold) {
        return 0xFF000000;
    } else {
        return 0xFFFFFFFF;
    }
}
于 2012-04-14T21:02:34.563 回答
0

除非是透明的蓝色(0 alpha,0 红色,0 绿色,0-255 蓝色),否则像素的值不会是 0 - 255。Alpha、Red、Green、Blue 可能在 0 到 255 的范围内,但放在一起会更大。使用 255 的 alpha 值,您将在整数上得到前导 1。前导表示整数为负数。你的最终值是正确的。此外,Torious 只是缩短了您的方程式,但您的两个计算都可以正常工作。

于 2012-04-26T00:26:24.793 回答
0

int newPixel = (alpha << 24) | (red << 16) | (green << 8) | blue;

这导致颜色编码为 0xAARRGGBB,这可能是您想要的。

于 2012-04-14T20:59:27.053 回答