com.opencv.mouse.MouseMainFrame.java Source code

Java tutorial

Introduction

Here is the source code for com.opencv.mouse.MouseMainFrame.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.opencv.mouse;

import java.awt.AWTException;
import java.awt.Graphics;
import java.awt.Robot;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.MatOfPoint;
import org.opencv.core.Point;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.core.Size;
import org.opencv.highgui.Highgui;
import org.opencv.highgui.VideoCapture;
import org.opencv.imgproc.Imgproc;

/**
 *
 * @author sony
 */
public class MouseMainFrame extends javax.swing.JFrame {

    /**
     * Creates new form MouseMainFrame
     */
    Graphics g;
    Graphics g1;
    BufferedImage image;
    Thread t = null;
    Thread t1 = null;
    boolean threadDurum = false;
    VideoCapture webCam = null;
    Mat element;
    int sayac;
    Mat thresholded;
    Robot robot;
    Mat kesit = null;

    public MouseMainFrame() {
        initComponents();
        element = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(3, 3));
        g = jPanel1.getGraphics();
        double screen_height = java.awt.Toolkit.getDefaultToolkit().getScreenSize().height;
        double screen_width = java.awt.Toolkit.getDefaultToolkit().getScreenSize().width;
        System.out.println(screen_height);
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jToggleButton1 = new javax.swing.JToggleButton();
        jPanel1 = new javax.swing.JPanel();
        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jToggleButton1.setText("Kamera A");
        jToggleButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jToggleButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(jPanel1Layout
                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 640, Short.MAX_VALUE));
        jPanel1Layout.setVerticalGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGap(0, 480, Short.MAX_VALUE));

        jButton1.setText("jButton1");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(
                javax.swing.GroupLayout.Alignment.TRAILING,
                layout.createSequentialGroup().addContainerGap()
                        .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE,
                                javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(jToggleButton1).addComponent(jButton1))
                        .addContainerGap(64, Short.MAX_VALUE)));
        layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup().addGap(34, 34, 34).addGroup(layout
                        .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE,
                                javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGroup(layout.createSequentialGroup().addComponent(jToggleButton1).addGap(31, 31, 31)
                                .addComponent(jButton1)))
                        .addContainerGap(68, Short.MAX_VALUE)));

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jToggleButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jToggleButton1ActionPerformed
        try {
            robot = new Robot();
        } catch (AWTException e) {
        }
        t = new Thread() {
            public void run() {

                MatToBufImg matToBufferedImageConverter = new MatToBufImg(); //Utility class to convert Mat to Java's BufferedImage

                webCam = new VideoCapture(0);
                if (!webCam.isOpened()) {
                    System.out.println("Kamera Ak Deil..!");
                } else
                    System.out.println("Kamera Ald --> " + webCam.toString());

                Mat webcam_image = new Mat(480, 640, CvType.CV_8UC3);
                Mat hsv_image = new Mat(webcam_image.cols(), webcam_image.rows(), CvType.CV_8UC3);
                thresholded = new Mat(webcam_image.cols(), webcam_image.rows(), CvType.CV_8UC3,
                        new Scalar(255, 255, 255));
                if (webCam.isOpened()) {
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException ex) {

                    }

                    while (true) {
                        try {
                            webCam.read(webcam_image);
                        } catch (Exception e) {
                            System.out.println("Web Cam Kapal !");
                        }

                        if (!webcam_image.empty()) {
                            try {
                                Thread.sleep(10);
                            } catch (InterruptedException ex) {

                            }
                            // Mat inRangeResim = webcam_image.clone();
                            /*
                            Mat inRangeResim = webcam_image.clone();
                            matToBufferedImageConverter.setMatrix(inRangeResim, ".jpg");
                            image =matToBufferedImageConverter.getBufferedImage();
                            Highgui.imwrite("D:\\bitirme.jpg", inRangeResim);
                            */

                            //       MatOfRect faceDetections = new MatOfRect();
                            Imgproc.cvtColor(webcam_image, hsv_image, Imgproc.COLOR_BGR2HSV);
                            //siyah hsv range 0 0 0 - 180 45 100
                            //hsvmavi   Core.inRange(webcam_image, new Scalar(75,63,40), new Scalar(118,255,255), webcam_image);
                            //rgb mavi        // Core.inRange(webcam_image, new Scalar(50,0,0), new Scalar(255,0,0), webcam_image);
                            //turuncu hsv      Core.inRange(webcam_image, new Scalar(5,50,50), new Scalar(15,255,255), webcam_image);
                            //Core.inRange(webcam_image, new Scalar(80,50,50), new Scalar(140,255,255), webcam_image);
                            //        Core.inRange(webcam_image, new Scalar(29,0,24), new Scalar(30,155,155), webcam_image);

                            //hsv mavi
                            //                       jSliderHmin.setValue(75);
                            //                       jSliderSmin.setValue(63);
                            //                       jSliderVmin.setValue(40);
                            //                       jSliderHmax.setValue(118);
                            //                       jSliderSmax.setValue(255);
                            //                       jSliderVmax.setValue(255);
                            //
                            //                       jSliderHmin.setValue(0);
                            //                       jSliderSmin.setValue(0);
                            //                       jSliderVmin.setValue(0);
                            //                       jSliderHmax.setValue(179);
                            //                       jSliderSmax.setValue(39);
                            //                       jSliderVmax.setValue(120);
                            Core.inRange(hsv_image, new Scalar(100, 97, 206), new Scalar(120, 255, 255),
                                    thresholded);
                            Imgproc.dilate(thresholded, thresholded, element);

                            Imgproc.erode(thresholded, thresholded, element);
                            Imgproc.dilate(thresholded, thresholded, element);

                            Imgproc.erode(thresholded, thresholded, element);

                            List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
                            Imgproc.findContours(thresholded, contours, new Mat(), Imgproc.RETR_LIST,
                                    Imgproc.CHAIN_APPROX_SIMPLE, new Point(0, 0));
                            Imgproc.drawContours(thresholded, contours, -1, new Scalar(255.0, 255.0, 255.0), 5);

                            for (int i = 0; i < contours.size(); i++) {
                                //  System.out.println(Imgproc.contourArea(contours.get(i)));
                                //    if (Imgproc.contourArea(contours.get(i)) > 1 ){
                                Rect rect = Imgproc.boundingRect(contours.get(i));
                                kesit = thresholded.submat(rect);
                                //System.out.println(rect.height);
                                // if (rect.height > 20 && rect.height <30 && rect.width < 30 && rect.width >20){
                                //  System.out.println(rect.x +","+rect.y+","+rect.height+","+rect.width);
                                Core.rectangle(webcam_image, new Point(rect.x, rect.y),
                                        new Point(rect.x + rect.width, rect.y + rect.height),
                                        new Scalar(0, 0, 255));

                                //}
                                //}
                                if (rect.height > 15 && rect.width > 15) {
                                    System.out.println(rect.x + "\n" + rect.y);
                                    Core.circle(webcam_image, new Point(rect.x, rect.y), i, new Scalar(0, 255, 0));
                                    robot.mouseMove((int) (rect.x * 3), (int) (rect.y * 2.25));
                                }

                            }

                            //   Imgproc.cvtColor(webcam_image, webcam_image, Imgproc.COLOR_HSV2BGR);
                            //  hsv_image.convertTo(hsv_image, CvType.CV_32F);

                            //   Imgproc.Canny(thresholded, thresholded, 10, 20);
                            //   Core.bitwise_and(thresholded, webcam_image, webcam_image);

                            //ise yarar

                            //    Imgproc.cvtColor(thresholded, thresholded, Imgproc.COLOR_GRAY2BGR);
                            //  Core.bitwise_and(thresholded, webcam_image, webcam_image);

                            //    webcam_image.copyTo(hsv_image, thresholded);
                            //                            System.out.println("<------------------------------>");
                            //                            System.out.println("BGR: " +webcam_image.channels()+"  Size : "+webcam_image.size());
                            //                            System.out.println("HSV :"+hsv_image.channels()+"  Size: "+hsv_image.size());
                            //                            System.out.println("Thresold :"+thresholded.channels()+"  Size : "+thresholded.size());
                            //                            System.out.println("<------------------------------>");
                            //
                            matToBufferedImageConverter.setMatrix(webcam_image, ".jpg");

                            image = matToBufferedImageConverter.getBufferedImage();
                            g.drawImage(image, 0, 0, webcam_image.cols(), webcam_image.rows(), null);

                        } else {

                            System.out.println("Grnt yok!");
                            break;
                        }
                    }
                    //           webCam.release();
                }

            }
        };
        threadDurum = true;
        t.start();
    }//GEN-LAST:event_jToggleButton1ActionPerformed

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        Highgui.imwrite("D:\\kesit.jpg", kesit);
    }//GEN-LAST:event_jButton1ActionPerformed

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(MouseMainFrame.class.getName()).log(java.util.logging.Level.SEVERE,
                    null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(MouseMainFrame.class.getName()).log(java.util.logging.Level.SEVERE,
                    null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(MouseMainFrame.class.getName()).log(java.util.logging.Level.SEVERE,
                    null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(MouseMainFrame.class.getName()).log(java.util.logging.Level.SEVERE,
                    null, ex);
        }
        //</editor-fold>
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new MouseMainFrame().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JToggleButton jToggleButton1;
    // End of variables declaration//GEN-END:variables
}