Android - 更改照片中像素的颜色

4
我想从相机拍摄的照片中将除黑色以外的所有颜色都改为白色。然而,物体的黑色会随着光线和白平衡的变化而改变,因此无法被检测为黑色并且也不能被改为白色。
public void subColor(Mat src, String timeStamp, File mediaStorageDir) throws FileNotFoundException {
    Bitmap output = Bitmap.createBitmap(src.width(), src.height(), Bitmap.Config.ARGB_8888);
    Utils.matToBitmap(src, output);

    for (int x = 0; x < output.getWidth(); x++)
        for (int y = 0; y < output.getHeight(); y++) {
            int pixel = output.getPixel(x, y);
            if (pixel != Color.BLACK)
                output.setPixel(x, y, Color.WHITE);
        }

    String mImageName= timeStamp + "_EDIT" + ".jpg";
    File mediaFile = new File(mediaStorageDir.getPath() + File.separator + mImageName);
    FileOutputStream fos = new FileOutputStream(mediaFile);
    output.compress(Bitmap.CompressFormat.JPEG, 100, fos);
}

我想知道像素的颜色是否可以与黑色范围进行比较,而不是Color.BLACK。
谢谢。

注意:获取像素值的语句 int pixel = output.getPixel(x, y) 应该从源位图中获取,而不是输出位图,即正确写法为:int pixel = src.getPixel(x, y) - Damilola Olowookere
2个回答

1
希望以下步骤能够帮助您: 1. 计算像素的RGB值,例如:
int r = (pixel >> 16) & 0xff;  
int g = (pixel >>  8) & 0xff; 
int b = (pixel >>  0) & 0xff; 

将RGB颜色值转换为亮度值,使用以下公式进行计算:
Y = 0.2126*r + 0.7152*g + 0.0722*b
  1. 检查它是否是黑色的阴影,如下:

    if( Y < 128){ //可以视为黑色阴影 }else{ //可以视为白色阴影 }


请问您能否解释一下您是如何得到那些硬编码的十进制值的,或者提供一个描述此过程的链接? - Damilola Olowookere

0

黑色没有范围。黑色只是一种颜色。如果你想知道某个颜色是否比另一个颜色更暗,你可以这样做:

if(Color.red(myColor) < 20 &&
     Color.blue(myColor) < 20 && 
     Color.green(myColor) < 20){
    ...
 }

你想要比较的颜色是 #202020。 如果你想确保这个颜色是灰色,添加Color.red(myColor) == Color.blue(myColor) && Color.green(myColor) == Color.blue(myColor)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接