Обработка изображений в Java — изменение ориентации изображения

Опубликовано: 15 Сентября, 2022

Предпосылки:

  • Обработка изображений в Java — чтение и запись
  • Обработка изображений в Java — получение и установка пикселей
  • Обработка изображений в Java — преобразование цветного изображения в изображение в градациях серого
  • Обработка изображений в Java — преобразование цветного изображения в негативное изображение
  • Обработка изображений в Java — преобразование цветных изображений в красные, зеленые, синие
  • Обработка изображений в Java — преобразование цветного изображения в изображение сепии
  • Обработка изображений в Java — создание случайного пиксельного изображения
  • Обработка изображений в Java — создание зеркального изображения
  • Обработка изображений в Java — распознавание лиц
  • Обработка изображений в Java — водяные знаки на изображении

Изменение ориентации изображения

Здесь мы будем использовать OpenCV для изменения ориентации любого входного изображения с помощью метода CORE.flip() библиотеки OpenCV . Основная идея заключается в том, что входной буферизованный объект изображения будет преобразован в матовый объект, а затем будет создан новый матовый объект, в который будут помещены исходные значения матового объекта после изменения ориентации. Для достижения вышеуказанного результата нам потребуются некоторые методы OpenCV:

  • getRaster() — метод возвращает записываемый растр, который, в свою очередь, используется для получения необработанных данных из входного изображения.
  • put(int row, int column, byte[] data) или get(int row, int column, byte[] data): используется для чтения/записи необработанных данных в матовый объект.
  • flip(mat mat1, mat mat2, int flip_value): mat1 и mat2 соответствуют входным и выходным матовым объектам, а flip_value определяет тип ориентации. -ось), -1 (переворачивание по обеим осям).

Реализация: Пусть образец изображения будет следующим:

Пример:

Java




// Java program to Illustrate How to Change
// Orientation of an Image
  
// Importing required classes
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
  
// Main class
// OrientingImage
public class GFG {
  
    // Main driver method
    public static void main(String[] args)
        throws IOException
    {
  
        // Loading methods of the opencv library
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
  
        // Passing the input image as path from local
        // directory by creating object of File class
        File input = new File("E:\test.jpg");
  
        // Reading image
        BufferedImage image = ImageIO.read(input);
  
        // Converting buffered image object to mat object
        byte[] data = ((DataBufferByte)image.getRaster()
                           .getDataBuffer())
                          .getData();
        Mat mat = new Mat(image.getHeight(),
                          image.getWidth(), CvType.CV_8UC3);
        mat.put(0, 0, data);
  
        // Creating a new mat object and
        // putting the modified input mat object
        // using flip() method
        Mat newMat
            = new Mat(image.getHeight(), image.getWidth(),
                      CvType.CV_8UC3);
  
        // Fipping the image about both axis
        Core.flip(mat, newMat, -1);
  
        // Converting the newly created mat object to
        // buffered image object
        byte[] newData
            = new byte[newMat.rows() * newMat.cols()
                       * (int)(newMat.elemSize())];
        newMat.get(0, 0, newData);
        BufferedImage image1 = new BufferedImage(
            newMat.cols(), newMat.rows(), 5);
        image1.getRaster().setDataElements(
            0, 0, newMat.cols(), newMat.rows(), newData);
  
        // Storing the output image by
        // creating object of File class
        File output = new File("E:\result.jpg");
        ImageIO.write(image1, "jpg", output);
    }
}

Выход:

Note: Do not scale for resolution as the output image is appended bigger to perceive better, it will be generated on IDE of same size as that of resolution and size passed of the input image. 

Эта статья предоставлена Pratik Agarwal . Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью с помощью write.geeksforgeeks.org или отправить ее по адресу review-team@geeksforgeeks.org. Посмотрите, как ваша статья появится на главной странице GeeksforGeeks, и помогите другим гикам. Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсуждаемой выше.