Обработка изображений в Java | Установите 11 (Изменение ориентации изображения)

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


В этой статье мы будем использовать opencv для изменения ориентации любого входного изображения с помощью метода CORE.flip () библиотеки OpenCV.

Основная идея состоит в том, что входной буферный объект изображения будет преобразован в объект mat, а затем будет создан новый объект mat, в который будут помещены исходные значения объекта mat после изменения ориентации.

For achieving the above result, we will be requiring some of the OpenCV methods:

  • getRaster() – The method returns a writable raster which in turn is used to get the raw data from input image.
  • put(int row, int column, byte[] data) / get(int row, int column, byte[] data) – used to read/write the raw data into a mat object.
  • flip(mat mat1, mat mat2, int flip_value) – mat1 and mat2 corresponds to input and output mat objects and the flip_value decides the orientation type.flip_value can be either 0 (flipping along x-axis), 1 (flipping along y-axis), -1 (flipping along both the axis).
// Java program to illustrate orientation modification of image
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;
  
public class OrientingImage
{
  public static void main( String[] args ) throws IOException
  {
    // loads methods of the opencv library
    System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
  
    // input buffered image object
    File input = new File("E:\test.jpg");
    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 by using flip()
    Mat newMat = new Mat(image.getHeight(),image.getWidth(),CvType.CV_8UC3);
    Core.flip(mat, newMat, -1);  //flipping the image about both axis
  
    // 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);
  
    File ouptut = new File("E:\result.jpg");
    ImageIO.write(image1, "jpg", ouptut);
  }
}

Выход:


test.jpg


result.jpg

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

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше.

Вниманию читателя! Не переставай учиться сейчас. Ознакомьтесь со всеми важными концепциями Java Foundation и коллекций с помощью курса "Основы Java и Java Collections" по доступной для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .