Tomar una instantánea desde la cámara del sistema usando OpenCV en Java

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: 

  1. El paquete ‘javax.swing’
  2. 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

  1. Cree un proyecto y agregue una biblioteca OpenCV .
  2. Crear paquete
  3. Crear una clase
  4. Cree una carpeta llamada «imágenes» para guardar las imágenes capturadas.
  5. 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.

Publicación traducida automáticamente

Artículo escrito por pawki y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *