Java DIP - Conversion de forme d'image

La forme de l'image peut facilement être modifiée en utilisant OpenCV. L'image peut être inversée, mise à l'échelle ou pivotée dans l'une des quatre directions.

Afin de changer la forme de l'image, nous lisons l'image et la convertissons en objet Mat. 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.

Retourner une image

OpenCV permet trois types de flip codes qui sont décrits ci-dessous -

Sr.No. Flip Code et Description
1

0

0 signifie, retournement autour de l'axe x.

2

1

1 signifie, retournement autour de l'axe y.

3

-1

-1 signifie, basculer autour des deux axes.

Nous passons le code flip approprié dans la méthode flip() dans le Coreclasse. Sa syntaxe est donnée ci-dessous -

Core.flip(source mat, destination mat1, flip_code);

La méthode flip() prend trois paramètres - la matrice d'image source, la matrice d'image de destination et le code de retournement.

En dehors de la méthode flip, il existe d'autres méthodes fournies par la classe Core. Ils sont décrits brièvement -

Sr.No. Méthode et description
1

add(Mat src1, Mat src2, Mat dst)

Il calcule la somme par élément de deux tableaux ou d'un tableau et d'un scalaire.

2

bitwise_and(Mat src1, Mat src2, Mat dst)

Il calcule la conjonction bit par élément par élément de deux tableaux ou d'un tableau et d'un scalaire.

3

bitwise_not(Mat src, Mat dst)

Il inverse chaque bit d'un tableau.

4

circle(Mat img, Point center, int radius, Scalar color)

Il dessine un cercle.

5

sumElems(Mat src)

Il brouille une image à l'aide d'un filtre gaussien.

6

subtract(Mat src1, Scalar src2, Mat dst, Mat mask)

Il calcule la différence par élément entre deux tableaux ou tableaux et un scalaire.

Exemple

L'exemple suivant illustre l'utilisation de la classe Core pour retourner une image -

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);
         Core.flip(mat, mat1, -1);

         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 ci-dessus, le nom d'une image est inversé digital_image_processing.jpg à son image d'espace colorimétrique HSV équivalente et écrivez-la sur le disque dur avec le nom flip.jpg.

Image originale

Image inversée