如何为图片制作水下过滤器

时间:2015-02-10 16:15:45

标签: java image-processing

我有一个项目,其中一部分是使鱼(名为water.jpg)的图片更加明显。我只是不知道我需要更改哪些像素才能使其正常工作。我一次尝试只保留蓝色,绿色或红色,我一次尝试保留蓝色,绿色或红色的所有东西。我只需要知道我需要改变哪些图片。我所拥有的代码只是几种方法,它们都能正常运行,但它们是我必须以此水下方法为基础的。

public static void main(String[] args) {
    Picture beach = new Picture("water.jpg");
    beach.explore();
    beach. (INSERT.METHOD.HERE);
    beach.explore();
}

public void zeroBlue() {
    Pixel[][] pixels = this.getPixels2D();
    for (Pixel[] rowArray : pixels) {
        for (Pixel pixelObj : rowArray) {
            pixelObj.setBlue(0);
        }
    }
}

public void keepOnlyBlue() {
    Pixel[][] pixels = this.getPixels2D();
    for (Pixel[] rowArray : pixels) {
        for (Pixel pixelObj : rowArray) {
            pixelObj.setGreen(0);
            pixelObj.setRed(0);
        }
    }
}

public void grayscale() {
    Pixel[][] pixels = this.getPixels2D();
    for (Pixel[] rowArray : pixels) {
        for (Pixel pixelObj : rowArray) {
            int avg = (pixelObj.getGreen() + pixelObj.getBlue() + pixelObj.getRed()) / 3;
            pixelObj.setGreen(avg - 3);
            pixelObj.setRed(avg - 3);
            pixelObj.setBlue(avg - 3);
        }
    }
}

public void negate() {
    Pixel[][] pixels = this.getPixels2D();
    for (Pixel[] rowArray : pixels) {
        for (Pixel pixelObj : rowArray) {
            pixelObj.setGreen(255 - pixelObj.getGreen());
            pixelObj.setRed(255 - pixelObj.getGreen());
            pixelObj.setBlue(255 - pixelObj.getGreen());
        }
    }
}

1 个答案:

答案 0 :(得分:0)

你能附上water.jpg的照片吗?它可能有助于理解您的问题。 你的否定也应该是这个......

public void negate() {
     Pixel[][] pixels = this.getPixels2D();
     for (Pixel[] rowArray : pixels) {
         for (Pixel pixelObj : rowArray) {
             pixelObj.setGreen(255 - pixelObj.getGreen());
             pixelObj.setRed(255 - pixelObj.getRed());
             pixelObj.setBlue(255 - pixelObj.getBlue());
         }
     }
}

还是我自己倒退了?