Java DIP - Conversión de forma de imagen
La forma de la imagen se puede cambiar fácilmente usando OpenCV. La imagen puede voltearse, escalarse o girar en cualquiera de las cuatro direcciones.
Para cambiar la forma de la imagen, leemos la imagen y la convertimos en objeto Mat. Su sintaxis se da a continuación:
File input = new File("digital_image_processing.jpg"); BufferedImage image = ImageIO.read(input); //convert Buffered Image to Mat.
Volteando una imagen
OpenCV permite tres tipos de códigos de inversión que se describen a continuación:
No Señor. | Código Flip |
---|---|
1 |
0
0 significa, volteando alrededor del eje x.
|
2 |
1
1 significa, volteando alrededor del eje y.
|
3 |
-1
-1 significa, dando la vuelta a ambos ejes.
|
Pasamos el código flip apropiado en el método flip () en la clase Core . Su sintaxis se da a continuación:
Core.flip(source mat, destination mat1, flip_code);
El método flip () toma tres parámetros: la matriz de la imagen de origen, la matriz de la imagen de destino y el código flip.
Además del método flip, hay otros métodos proporcionados por la clase Core.Se describen brevemente:
No Señor. | Métodos |
---|---|
1 |
agregar (Mat src1, Mat src2, Mat dst)
Calcula la suma por elemento de dos matrices o una matriz y un escalar.
|
2 |
bitwise_and (Mat src1, Mat src2, Mat dst)
Calcula la conjunción bit-wise por elemento de dos matrices o una matriz y un escalar.
|
3 |
bitwise_not (Mat src, Mat dst)
Invierte cada bit de una matriz.
|
4 |
círculo (Mat img, centro del punto, radio interno, color escalar)
Dibuja un circulo
|
5 |
sumElems (Mat src)
Desenfoca una imagen usando un filtro gaussiano.
|
6 |
restar (Mat src1, Scalar src2, Mat dst, Mat mask)
Calcula la diferencia por elemento entre dos matrices o matriz y un escalar.
|
Ejemplo
El siguiente ejemplo demuestra el uso de la clase Core para voltear una imagen:
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()); } } }
Salida
Cuando ejecutas el ejemplo anterior, voltea un nombre de imagen digital_image_processing.jpg a su imagen de espacio de color HSV equivalente y lo escribe en el disco duro con el nombre flip.jpg .
0 comentarios:
Publicar un comentario