La biblioteca OpenCV en Java contiene una clase llamada ‘ VideoCapture’ que proporciona un método llamado lectura (que está predefinido) para escanear imágenes desde la cámara web. El objeto Mat se pasa como parámetro en el método de lectura.
Concepto:
- El paquete ‘javax.swing’
- El kit de herramientas de ventana abstracta (AWT)
Discutámoslos brevemente antes de sumergirnos en la parte del procedimiento y la implementación.
- El paquete ‘javax.swing’ se usa ya que este paquete proporciona clases para la API Java Swing, como JButton, JTextArea , JCheckbox , JMenu, etc. Los conceptos de Java involucrados aquí son la clase Swing y el conjunto de herramientas de ventanas abstractas, como se menciona a continuación:
- javax.swing.ImageIcon : la clase ImageIcon es una implementación de la interfaz Icon que dibuja iconos a partir de imágenes.
- javax.swing.Jframe : La clase JFrame es un tipo de contenedor que hereda el java. JFrame funciona como la ventana principal donde se agregan componentes como etiquetas, botones y campos de texto para crear una GUI.
- javax.swing.JLabel : la clase JLabel se usa para mostrar una string corta o un icono de imagen.x
- Abstract Window Toolkit ( AWT) es un paquete de Java que se utiliza para crear interfaces gráficas de usuario. Las características de AWT incluyen:
- Un conjunto de componentes de interfaz nativos.
- Un modelo robusto de manejo de eventos.
- Herramientas gráficas y de imágenes, incluidas clases de formas, colores y fuentes.
- Administradores de diseño, para diseños de ventana flexibles que no dependen de un tamaño de ventana o resolución de pantalla en particular.
- Clases de transferencia de datos, para cortar y pegar a través del portapapeles nativo de la plataforma.
Procedimiento : Pasos para dibujar formas geométricas en imágenes en OpenCV
- Cree un proyecto y agregue una biblioteca OpenCV .
- Crear paquete
- Crear una clase
- Cree una carpeta llamada «imágenes» para guardar las imágenes capturadas.
- Escribir el programa java deseado en un archivo java.
Implementación: escribir el siguiente programa java en el archivo java para tomar una instantánea de la cámara del sistema.
Ejemplo
Java
// Java Program to take a Snapshot from System Camera // using OpenCV // Importing openCV modules package com.opencvcamera; // importing swing and awt classes import java.awt.Dimension; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; // Importing date class of sql package import java.sql.Date; import java.text.DateFormat; import java.text.SimpleDateFormat; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.core.MatOfByte; import org.opencv.imgcodecs.Imgcodecs; // Importing VideoCapture class // This class is responsible for taking screenshot import org.opencv.videoio.VideoCapture; // Class - Swing Class public class Camera extends JFrame { // Camera screen private JLabel cameraScreen; // Button for image capture private JButton btnCapture; // Start camera private VideoCapture capture; // Store image as 2D matrix private Mat image; private boolean clicked = false; public Camera() { // Designing UI setLayout(null); cameraScreen = new JLabel(); cameraScreen.setBounds(0, 0, 640, 480); add(cameraScreen); btnCapture = new JButton("capture"); btnCapture.setBounds(300, 480, 80, 40); add(btnCapture); btnCapture.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { clicked = true; } }); setSize(new Dimension(640, 560)); setLocationRelativeTo(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } // Creating a camera public void startCamera() { capture = new VideoCapture(0); image = new Mat(); byte[] imageData; ImageIcon icon; while (true) { // read image to matrix capture.read(image); // convert matrix to byte final MatOfByte buf = new MatOfByte(); Imgcodecs.imencode(".jpg", image, buf); imageData = buf.toArray(); // Add to JLabel icon = new ImageIcon(imageData); cameraScreen.setIcon(icon); // Capture and save to file if (clicked) { // prompt for enter image name String name = JOptionPane.showInputDialog( this, "Enter image name"); if (name == null) { name = new SimpleDateFormat( "yyyy-mm-dd-hh-mm-ss") .format(new Date( HEIGHT, WIDTH, getX())); } // Write to file Imgcodecs.imwrite("images/" + name + ".jpg", image); clicked = false; } } } // Main driver method public static void main(String[] args) { System.loadLibrary(Core.NATIVE_LIBRARY_NAME); EventQueue.invokeLater(new Runnable() { // Overriding existing run() method @Override public void run() { final Camera camera = new Camera(); // Start camera in thread new Thread(new Runnable() { @Override public void run() { camera.startCamera(); } }).start(); } }); } }
Producción:
Después de una compilación exitosa del programa, la ejecución es la siguiente, ya que se abrirá la cámara web donde haga clic en el botón » Capturar » y se nombrará el resto de la imagen. Ahora, haga clic en el botón «Aceptar» para guardar la imagen. La imagen de salida se guardará en la carpeta que se creó anteriormente.