Jose Ramon
Jose Ramon

Reputation: 5444

Convert an RGB image to gray_scale HSV in java

I want to convert a RGB image into HSV and return a gray_scale image, finally. I ve got the following code in order to read and convert my image:

    BufferedImage lum = new BufferedImage(original.getWidth(), original.getHeight(), original.getType());

    for(int i=0; i<original.getWidth(); i++) {
        for(int j=0; j<original.getHeight(); j++) {

            // Get pixels by R, G, B
            alpha = new Color(original.getRGB(i, j)).getAlpha();
            red = new Color(original.getRGB(i, j)).getRed();
            green = new Color(original.getRGB(i, j)).getGreen();
            blue = new Color(original.getRGB(i, j)).getBlue();

            float[] hsv = Color.RGBtoHSB(red, green, blue, null);
            int hue = (int) Math.round(360 * hsv[0]);

            red = (int) (0.21 * red + 0.71 * green + 0.07 * blue);
            // Return back to original format
            newPixel = colorToRGB(alpha, red, red, red);

            // Write pixels into image
            lum.setRGB(i, j, hue);

        }
    }

    return lum;

What have to do in order to return a hsv gray_scale image? Is the above the proper way to do so?

Upvotes: 0

Views: 2816

Answers (1)

Don Chakkappan
Don Chakkappan

Reputation: 7560

It is very easy with JavaCV [OpenCV wrapper for java]

IplImage originalImage = cvLoadImage("path of input image", 1);
IplImage grayImage = IplImage.create(originalImage.width(),originalImage.height(),  IPL_DEPTH_8U, 1);  
cvCvtColor(originalImage, grayImage, CV_BGR2GRAY);
cvSaveImage("path of output image", originalImage);

or if you want to implement it in pure java , use the following code

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageDecoder;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import java.awt.color.ColorSpace;
import java.io.*;
import java.awt.image.*;
import javax.imageio.ImageIO;

public class GrayScale {

public static void convertToGrayscale() throws Exception {

    JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(new FileInputStream(new      File("a.jpg")));
    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(new   FileOutputStream("b.jpg"));
    BufferedImage sourceImg = decoder.decodeAsBufferedImage();
    BufferedImageOp op = new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_GRAY), null);
    BufferedImage destImg = op.filter(sourceImg, null);
    encoder.encode(destImg);
    decoder = null;
    encoder = null;

}

public static void main(String[] args) throws Exception {

    GrayScale.convertToGrayscale();

}

}

Upvotes: 2

Related Questions