Taking a Snapshot from System Camera using OpenCV in Java

13 Jan, 2021
The OpenCV library in Java contains a class named ‘VideoCapture’ which provides a method called read (which is predefined) to scan pictures from the webcam. Mat object is passed as a parameter in the read method.
Concept: 
The ‘javax.swing’ PackageThe Abstract Window Toolkit (AWT)
The ‘javax.swing’ Package
The Abstract Window Toolkit (AWT)
Let’s discuss them briefly before diving into the procedure and implementation part.
The ‘javax.swing’ package is used as this package provides classes for Java Swing API such as JButton, JTextArea, JCheckbox, JMenu, etc. Concepts of java involved here are Swing class and abstract windows toolkit as mentioned below:javax.swing.ImageIcon : The class ImageIcon is an implementation of the Icon interface that paints Icons from Images.javax.swing.Jframe : The class JFrame is a type of container which inherits the java. JFrame works like the main window where components like labels, buttons, text fields are added to create a GUI.javax.swing.JLabel : The class JLabel is used to display a short string or an image icon.x
javax.swing.ImageIcon : The class ImageIcon is an implementation of the Icon interface that paints Icons from Images.
javax.swing.Jframe : The class JFrame is a type of container which inherits the java. JFrame works like the main window where components like labels, buttons, text fields are added to create a GUI.
javax.swing.JLabel : The class JLabel is used to display a short string or an image icon.x
The Abstract Window Toolkit (AWT) is a Java package used for creating graphical user interfaces. AWT features include:A set of native interface components.A robust event-handling model.Graphics and imaging tools, including shape, color, and font classes.Layout managers, for flexible window layouts that do not depend on a particular window size or screen resolution.Data transfer classes, for cut and paste through the native platform clipboard.
A set of native interface components.
A robust event-handling model.
Graphics and imaging tools, including shape, color, and font classes.
Layout managers, for flexible window layouts that do not depend on a particular window size or screen resolution.
Data transfer classes, for cut and paste through the native platform clipboard.
Procedure: Steps to draw geometric shapes on images in OpenCV
Create a project and add an OpenCV library.Create PackageCreate a ClassCreate a folder named “images” to save the captured images.Writing the desired java program to a java file.
Create a project and add an OpenCV library.
Create Package
Create a Class
Create a folder named “images” to save the captured images.
Writing the desired java program to a java file.
Implementation: Writing the following java program in the java file to take a snapshot from the system camera.
Example
Java
// Java Program to take a Snapshot from System Camera// using OpenCV  // Importing openCV modulespackage com.opencvcamera;// importing swing and awt classesimport java.awt.Dimension;import java.awt.EventQueue;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;// Importing date class of sql packageimport 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 screenshotimport org.opencv.videoio.VideoCapture;  // Class - Swing Classpublic 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();            }        });    }}
Output:
After a successful compilation of the program, the execution is as follows as the webcam will open up where you click on the “Capture” button and the rest image will be named. Now, click on the “OK” button to save the image. The output image will be saved in the folder which was created earlier.
Java-OpenCV
Picked
Technical Scripter 2020
Java
Java Programs
Technical Scripter
Java
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.