如何使用 BufferedImageOp 在图像上应用黑白滤镜?

use*_*240 1 java swing image image-processing filter

我确实有这个代码来增加图像的清晰度 BufferedImageOp

class DecreaseSharpenFilter implements MyFilter{
    public BufferedImage processImage(BufferedImage image) {
        float[] decreaseSharpnessMatrix = {0.0f, +1.0f, 0.0f, +1.0f , -5.0f, +1.0f, 0.0f, +1.0f, 0.0f };
         BufferedImageOp DecreaseSharpenFilter = new ConvolveOp(new Kernel(3, 3, decreaseSharpnessMatrix),
                    ConvolveOp.EDGE_NO_OP, null);
                return DecreaseSharpenFilter.filter(image, null);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我想通过对这些行进行修改来将图像转换为黑白,但我真的不知道在矩阵中使用什么值以及如何对其进行卷积。

Ada*_*ost 5

您只需要创建一个颜色空间,然后将其传递给您的 convertOP

ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY);  
ColorConvertOp op = new ColorConvertOp(cs, null);
BufferedImage image = op.filter(image, null);
Run Code Online (Sandbox Code Playgroud)

  • 裁剪可以使用 getSubimage(x,y,w,h) 函数中内置的 BufferedImages。对比度控制有点棘手,所以看看这个家伙的方法并尝试修改它。http://gihansblog.com/2011/07/11/contrast-control-with-java-buffered-image-class/ (2认同)