Prerequisites:
- Image Processing in Java – Read and Write
- Image Processing In Java – Get and Set Pixels
- Image Processing in Java – Colored Image to Grayscale Image Conversion
- Image Processing in Java – Colored Image to Negative Image Conversion
- Image Processing in Java – Colored to Red Green Blue Image Conversion
- Image Processing in Java – Colored Image to Sepia Image Conversion
- Image Processing in Java – Creating a Random Pixel Image
- Image Processing in Java – Creating a Mirror Image
- Image Processing in Java – Face Detection
- Image Processing in Java – Watermarking an Image
Changing the Orientation of Image
Here we will use OpenCV to change the orientation of any input image, by using the CORE.flip() method of the OpenCV library. The main idea is that an input buffered image object will be converted to a mat object and then a new mat object will be created in which the original mat object values are put after orientation modification. 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 the input image.
- put(int row, int column, byte[] data) or 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 correspond to input and output mat objects and the flip_value decides the orientation type.flip_value can be either 0 (flipping along the x-axis), 1 (flipping along the y-axis), -1 (flipping along both the axis).
Implementation: Let the sample image be as follows:
Example:
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); } } |
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.
This article is contributed by Pratik Agarwal. If you like Lazyroar and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the Lazyroar main page and help other Geeks. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.