Java DIP - Conversion d'espace colorimétrique OpenCV

Afin de changer l'espace colorimétrique d'une image à une autre en utilisant OpenCV, nous lisons l'image dans 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.

OpenCv permet de nombreux types de conversion de couleur, qui peuvent tous être trouvés dans la classe Imgproc. Certains types sont décrits brièvement -

Sr.No. Type de conversion de couleur
1 COLOR_RGB2BGR
2 COLOR_RGB2BGRA
3 COLOR_RGB2GRAY
4 COLOR_RGB2HLS
5 COLOR_RGB2HSV
6 COLOR_RGB2Luv
sept COLOR_RGB2YUV
8 COLOR_RGB2Lab

À partir de n'importe quel type de conversion de couleur, passez simplement le type approprié dans la méthode cvtColor() dans le Imgprocclasse. Sa syntaxe est donnée ci-dessous -

Imgproc.cvtColor(source mat, destination mat1, Color_Conversion_Code);

La méthode cvtColor() prend trois paramètres qui sont la matrice d'image source, la matrice d'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 décrits brièvement -

Sr.No. 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 ddepth, 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 illustre l'utilisation de la classe Imgproc pour convertir une image d'un espace colorimétrique à un autre.

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_8UC3);
         Imgproc.cvtColor(mat, mat1, Imgproc.COLOR_RGB2HSV);

         byte[] data1 = new byte[mat1.rows()*mat1.cols()*(int)(mat1.elemSize())];
         mat1.get(0, 0, data1);
         BufferedImage image1 = new BufferedImage(mat1.cols(), mat1.rows(), 5);
         image1.getRaster().setDataElements(0, 0, mat1.cols(), mat1.rows(), data1);

         File ouptut = new File("hsv.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 d'espace colorimétrique HSV équivalente et l'écrit sur le disque dur avec le nom hsv.jpg.

Image originale (RVB)

Image convertie (HSV)