Java DIP - Conversion OpenCV GrayScale
Afin de convertir une image couleur en image en niveaux de gris à l'aide d'OpenCV, nous lisons l'image en BufferedImage et le convertir en MatObjet. Sa syntaxe est donnée ci-dessous -
File input = new File("digital_image_processing.jpg");
BufferedImage image = ImageIO.read(input);
//convert Buffered Image to Mat.
Ensuite, vous pouvez transformer l'image du format RVB au format Niveaux de gris en utilisant la méthode cvtColor() dans le Imgprocclasse. Sa syntaxe est donnée ci-dessous -
Imgproc.cvtColor(source mat, destination mat1, Imgproc.COLOR_RGB2GRAY);
La méthode cvtColor() prend trois paramètres qui sont la matrice de l'image source, la matrice de l'image de destination et le type de conversion des couleurs.
Outre la méthode cvtColor, il existe d'autres méthodes fournies par la classe Imgproc. Ils sont listés ci-dessous -
N ° Sr. | Méthode et description |
---|---|
1 |
cvtColor(Mat src, Mat dst, int code, int dstCn) Il convertit une image d'un espace colorimétrique à un autre. |
2 |
dilate(Mat src, Mat dst, Mat kernel) Il dilate une image en utilisant un élément structurant spécifique. |
3 |
equalizeHist(Mat src, Mat dst) Il égalise l'histogramme d'une image en niveaux de gris. |
4 |
filter2D(Mat src, Mat dst, int depth, Mat kernel, Point anchor, double delta) Il convolve une image avec le noyau. |
5 |
GaussianBlur(Mat src, Mat dst, Size ksize, double sigmaX) Il brouille une image à l'aide d'un filtre gaussien. |
6 |
integral(Mat src, Mat sum) Il calcule l'intégrale d'une image. |
Exemple
L'exemple suivant montre l'utilisation de la classe Imgproc pour convertir une image en niveaux de gris -
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;
import java.io.File;
import javax.imageio.ImageIO;
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.imgproc.Imgproc;
public class Main {
public static void main( String[] args ) {
try {
System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
File input = new File("digital_image_processing.jpg");
BufferedImage image = ImageIO.read(input);
byte[] data = ((DataBufferByte) image.getRaster().getDataBuffer()).getData();
Mat mat = new Mat(image.getHeight(), image.getWidth(), CvType.CV_8UC3);
mat.put(0, 0, data);
Mat mat1 = new Mat(image.getHeight(),image.getWidth(),CvType.CV_8UC1);
Imgproc.cvtColor(mat, mat1, Imgproc.COLOR_RGB2GRAY);
byte[] data1 = new byte[mat1.rows() * mat1.cols() * (int)(mat1.elemSize())];
mat1.get(0, 0, data1);
BufferedImage image1 = new BufferedImage(mat1.cols(),mat1.rows(), BufferedImage.TYPE_BYTE_GRAY);
image1.getRaster().setDataElements(0, 0, mat1.cols(), mat1.rows(), data1);
File ouptut = new File("grayscale.jpg");
ImageIO.write(image1, "jpg", ouptut);
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
}
Production
Lorsque vous exécutez l'exemple donné, il convertit un nom d'image digital_image_processing.jpg à son image équivalente en niveaux de gris et l'écrit sur le disque dur avec le nom grayscale.jpg.