Java tutorial
/* * 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 cubesolversimulator; import com.github.sarxos.webcam.Webcam; import com.github.sarxos.webcam.WebcamPanel; import com.github.sarxos.webcam.WebcamResolution; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JLabel; import org.opencv.core.Core; 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.imgproc.Imgproc; /** * * @author Akarsh */ public class VisualInputForm extends javax.swing.JFrame { /** * Creates new form VisualInputForm */ public VisualInputForm() { try { initComponents(); cam = Webcam.getDefault(); cam.setViewSize(WebcamResolution.VGA.getSize()); panel = new WebcamPanel(cam); panel.setSize(jPanel8.getSize()); jPanel8.add(panel); cam.open(); System.loadLibrary(Core.NATIVE_LIBRARY_NAME); jPanel6.setLayout(null); orig = new Mat(cam.getImage().getHeight(), cam.getImage().getWidth(), 16); blured = new Mat(orig.rows(), orig.cols(), orig.type()); gray = new Mat(orig.rows(), orig.cols(), orig.type()); edge = new Mat(orig.rows(), orig.cols(), orig.type()); contour = new Mat(orig.rows(), orig.cols(), orig.type()); temp = new Mat(orig.rows(), orig.cols(), orig.type()); img = new JLabel(""); } catch (Exception ex) { Logger.getLogger(VisualInputForm.class.getName()).log(Level.SEVERE, null, ex); } } /** * 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() { jPanel1 = new javax.swing.JPanel(); jLabel1 = new javax.swing.JLabel(); jPanel3 = new javax.swing.JPanel(); jPanel4 = new javax.swing.JPanel(); jPanel5 = new javax.swing.JPanel(); jPanel6 = new javax.swing.JPanel(); jPanel7 = new javax.swing.JPanel(); jPanel2 = new javax.swing.JPanel(); jLabel2 = new javax.swing.JLabel(); jLabel3 = new javax.swing.JLabel(); jLabel4 = new javax.swing.JLabel(); jLabel5 = new javax.swing.JLabel(); jLabel6 = new javax.swing.JLabel(); jLabel7 = new javax.swing.JLabel(); jButton2 = new javax.swing.JButton(); jPanel8 = new javax.swing.JPanel(); jLabel8 = new javax.swing.JLabel(); jButton1 = new javax.swing.JButton(); jButton3 = new javax.swing.JButton(); jLabel9 = new javax.swing.JLabel(); jLabel10 = new javax.swing.JLabel(); jLabel11 = new javax.swing.JLabel(); jLabel12 = new javax.swing.JLabel(); jLabel13 = new javax.swing.JLabel(); jLabel14 = new javax.swing.JLabel(); jLabel15 = new javax.swing.JLabel(); jLabel16 = new javax.swing.JLabel(); jLabel17 = new javax.swing.JLabel(); jButton4 = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); jPanel1.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); jLabel1.setFont(new java.awt.Font("Times New Roman", 1, 24)); // NOI18N jLabel1.setText("VISUAL INPUT : IMAGE TRANSFORMATIONS"); jPanel3.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); jPanel3.setName("cannyPanel"); // NOI18N jPanel3.setPreferredSize(new java.awt.Dimension(250, 250)); javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3); jPanel3.setLayout(jPanel3Layout); jPanel3Layout.setHorizontalGroup(jPanel3Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 248, Short.MAX_VALUE)); jPanel3Layout.setVerticalGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 248, Short.MAX_VALUE)); jPanel4.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); jPanel4.setName("bluredPanel"); // NOI18N jPanel4.setPreferredSize(new java.awt.Dimension(250, 250)); javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4); jPanel4.setLayout(jPanel4Layout); jPanel4Layout.setHorizontalGroup(jPanel4Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 248, Short.MAX_VALUE)); jPanel4Layout.setVerticalGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 0, Short.MAX_VALUE)); jPanel5.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); jPanel5.setName("grayPAnel"); // NOI18N jPanel5.setPreferredSize(new java.awt.Dimension(250, 250)); javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5); jPanel5.setLayout(jPanel5Layout); jPanel5Layout.setHorizontalGroup(jPanel5Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 248, Short.MAX_VALUE)); jPanel5Layout.setVerticalGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 248, Short.MAX_VALUE)); jPanel6.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); jPanel6.setName(""); // NOI18N jPanel6.setPreferredSize(new java.awt.Dimension(250, 250)); javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6); jPanel6.setLayout(jPanel6Layout); jPanel6Layout.setHorizontalGroup(jPanel6Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 248, Short.MAX_VALUE)); jPanel6Layout.setVerticalGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 0, Short.MAX_VALUE)); jPanel7.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); jPanel7.setName("contuorPanel"); // NOI18N jPanel7.setPreferredSize(new java.awt.Dimension(250, 250)); javax.swing.GroupLayout jPanel7Layout = new javax.swing.GroupLayout(jPanel7); jPanel7.setLayout(jPanel7Layout); jPanel7Layout.setHorizontalGroup(jPanel7Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 248, Short.MAX_VALUE)); jPanel7Layout.setVerticalGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 248, Short.MAX_VALUE)); jPanel2.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup(jPanel2Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 248, Short.MAX_VALUE)); jPanel2Layout.setVerticalGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 0, Short.MAX_VALUE)); jLabel2.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N jLabel2.setText("ORIGINAL IMAGE"); jLabel3.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N jLabel3.setText("GAUSSIAN FILTER APPLIED"); jLabel4.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N jLabel4.setText("GRAYSCALED IMAGE"); jLabel5.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N jLabel5.setText("CANNY EDGE DETECTION"); jLabel6.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N jLabel6.setText("CONTOURS FOUND"); jLabel7.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N jLabel7.setText("RECTANGULAR CONTOURS"); jButton2.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N jButton2.setText("ANALYSE"); jButton2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton2ActionPerformed(evt); } }); jPanel8.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); jPanel8.setName(""); // NOI18N jPanel8.setPreferredSize(new java.awt.Dimension(250, 250)); javax.swing.GroupLayout jPanel8Layout = new javax.swing.GroupLayout(jPanel8); jPanel8.setLayout(jPanel8Layout); jPanel8Layout.setHorizontalGroup(jPanel8Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 248, Short.MAX_VALUE)); jPanel8Layout.setVerticalGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 0, Short.MAX_VALUE)); jLabel8.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N jLabel8.setText("CAMERA FEED"); jButton1.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N jButton1.setText("CAPTURE"); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } }); jButton3.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N jButton3.setText("RESET"); jButton3.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton3ActionPerformed(evt); } }); jLabel9.setFont(new java.awt.Font("Times New Roman", 1, 18)); // NOI18N jLabel9.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jLabel9.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); jLabel10.setFont(new java.awt.Font("Times New Roman", 1, 18)); // NOI18N jLabel10.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jLabel10.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); jLabel11.setFont(new java.awt.Font("Times New Roman", 1, 18)); // NOI18N jLabel11.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jLabel11.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); jLabel12.setFont(new java.awt.Font("Times New Roman", 1, 18)); // NOI18N jLabel12.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jLabel12.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); jLabel13.setFont(new java.awt.Font("Times New Roman", 1, 18)); // NOI18N jLabel13.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jLabel13.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); jLabel14.setFont(new java.awt.Font("Times New Roman", 1, 18)); // NOI18N jLabel14.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jLabel14.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); jLabel15.setFont(new java.awt.Font("Times New Roman", 1, 18)); // NOI18N jLabel15.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jLabel15.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); jLabel16.setFont(new java.awt.Font("Times New Roman", 1, 18)); // NOI18N jLabel16.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jLabel16.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); jLabel17.setFont(new java.awt.Font("Times New Roman", 1, 18)); // NOI18N jLabel17.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jLabel17.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); jButton4.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N jButton4.setText("NEXT FACE"); jButton4.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton4ActionPerformed(evt); } }); javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup(jPanel1Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup().addGroup(jPanel1Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup().addGroup(jPanel1Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup().addGap(19, 19, 19).addComponent( jPanel8, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(jPanel1Layout.createSequentialGroup().addGap(41, 41, 41).addComponent( jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 202, javax.swing.GroupLayout.PREFERRED_SIZE))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(jPanel1Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel1) .addGroup(jPanel1Layout.createSequentialGroup().addGroup(jPanel1Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 197, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(jPanel1Layout .createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jButton4, javax.swing.GroupLayout.PREFERRED_SIZE, 177, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(jPanel1Layout .createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jButton3, javax.swing.GroupLayout.PREFERRED_SIZE, 167, javax.swing.GroupLayout.PREFERRED_SIZE))))) .addGroup(jPanel1Layout.createSequentialGroup().addGroup(jPanel1Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup().addGap(86, 86, 86) .addComponent(jLabel8).addGap(157, 157, 157).addComponent(jLabel2) .addGap(111, 111, 111).addComponent(jLabel3).addGap(96, 96, 96) .addComponent(jLabel4)) .addGroup(jPanel1Layout.createSequentialGroup().addGap(59, 59, 59) .addComponent(jLabel5).addGap(115, 115, 115).addComponent(jLabel6) .addGap(102, 102, 102).addComponent(jLabel7)) .addGroup(jPanel1Layout.createSequentialGroup().addGap(20, 20, 20) .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jPanel7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(68, 68, 68) .addGroup(jPanel1Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jLabel9, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel12, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel15, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(jPanel1Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jLabel10, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jLabel11, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jLabel13, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jLabel14, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jLabel16, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jLabel17, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE))))) .addGap(0, 0, Short.MAX_VALUE))) .addGap(116, 116, 116))); jPanel1Layout.setVerticalGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup().addGap(6, 6, 6) .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 36, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jButton4, javax.swing.GroupLayout.DEFAULT_SIZE, 37, Short.MAX_VALUE) .addGroup(jPanel1Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, 37, Short.MAX_VALUE) .addComponent(jButton2, javax.swing.GroupLayout.DEFAULT_SIZE, 37, Short.MAX_VALUE) .addComponent(jButton3, javax.swing.GroupLayout.DEFAULT_SIZE, 37, Short.MAX_VALUE))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel2).addComponent(jLabel3).addComponent(jLabel4) .addComponent(jLabel8)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel6, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jPanel8, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addGap(18, 18, 18) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(jPanel1Layout.createSequentialGroup().addGroup(jPanel1Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel7) .addGroup(jPanel1Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel6, javax.swing.GroupLayout.PREFERRED_SIZE, 17, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel5))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(jPanel1Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout .createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(jPanel7, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout .createSequentialGroup() .addGroup(jPanel1Layout .createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel10, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel9, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel11, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(jPanel1Layout .createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel12, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel13, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel14, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(jPanel1Layout .createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel15, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel16, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel17, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(61, 61, 61)))) .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap())); jPanel6.getAccessibleContext().setAccessibleName(""); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup().addContainerGap() .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 1061, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))); layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup( javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup().addContainerGap().addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))); pack(); }// </editor-fold>//GEN-END:initComponents private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed blurOriginal(); grayBlured(); edgeMap(); getContour(); repaint(); }//GEN-LAST:event_jButton2ActionPerformed private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed try { frame = cam.getImage(); ImageIO.write(frame, "jpg", new File("D:\\Project_work\\CubeSolverSimulator\\IMG_01.jpg")); orig = Highgui.imread("D:\\Project_work\\CubeSolverSimulator\\IMG_01.jpg"); img.setSize(jPanel6.getSize()); image = new ImageIcon(new ImageIcon("D:\\Project_work\\CubeSolverSimulator\\IMG_01.jpg").getImage() .getScaledInstance(img.getWidth(), img.getHeight(), Image.SCALE_FAST)); img.setIcon(image); img.repaint(); jPanel6.add(img); this.repaint(); } catch (IOException ex) { Logger.getLogger(VisualInputForm.class.getName()).log(Level.SEVERE, null, ex); } }//GEN-LAST:event_jButton1ActionPerformed private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton3ActionPerformed cam.close(); this.dispose(); VisualInputForm visualInputForm = new VisualInputForm(); visualInputForm.setVisible(true); System.out.flush(); }//GEN-LAST:event_jButton3ActionPerformed private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton4ActionPerformed DataBridge.setMedium(cols); Main.faceCount++; if (Main.faceCount < 6) { cam.close(); this.dispose(); VisualInputForm visualInputForm = new VisualInputForm(); visualInputForm.setVisible(true); System.out.flush(); } else { cam.close(); this.dispose(); } if (Main.faceCount == 5) { jButton4.setText("FINISH"); } }//GEN-LAST:event_jButton4ActionPerformed /** * @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(VisualInputForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(VisualInputForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(VisualInputForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(VisualInputForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } //</editor-fold> /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new VisualInputForm().setVisible(true); } }); } //User Defined variables Mat orig, blured, edge, gray, contour, temp; //detected colors String[] colors = { "B", "G", "R", "Y", "O", "W" }; int[] cols; //Thumbnails ImageIcon image, image1, image2, image3, image4, image5; JLabel img, img1, img2, img3, img4, img5; //Webcam Object declaration Webcam cam; WebcamPanel panel; BufferedImage frame; // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton jButton1; private javax.swing.JButton jButton2; private javax.swing.JButton jButton3; private javax.swing.JButton jButton4; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel10; private javax.swing.JLabel jLabel11; private javax.swing.JLabel jLabel12; private javax.swing.JLabel jLabel13; private javax.swing.JLabel jLabel14; private javax.swing.JLabel jLabel15; private javax.swing.JLabel jLabel16; private javax.swing.JLabel jLabel17; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel6; private javax.swing.JLabel jLabel7; private javax.swing.JLabel jLabel8; private javax.swing.JLabel jLabel9; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel2; private javax.swing.JPanel jPanel3; private javax.swing.JPanel jPanel4; private javax.swing.JPanel jPanel5; private javax.swing.JPanel jPanel6; private javax.swing.JPanel jPanel7; private javax.swing.JPanel jPanel8; // End of variables declaration//GEN-END:variables private void blurOriginal() { Imgproc.blur(orig, blured, new Size(18, 18)); Highgui.imwrite("blured.jpg", blured); img1 = new JLabel(""); img1.setSize(jPanel4.getSize()); image1 = new ImageIcon(new ImageIcon("D:\\Project_work\\CubeSolverSimulator\\blured.jpg").getImage() .getScaledInstance(img1.getWidth(), img1.getHeight(), Image.SCALE_FAST)); img1.setIcon(image1); img1.repaint(); jPanel4.add(img1); jPanel4.repaint(); } private void grayBlured() { Imgproc.cvtColor(blured, gray, Imgproc.COLOR_BGR2GRAY); Highgui.imwrite("gray.jpg", gray); img2 = new JLabel(""); img2.setSize(jPanel5.getSize()); image2 = new ImageIcon(new ImageIcon("D:\\Project_work\\CubeSolverSimulator\\gray.jpg").getImage() .getScaledInstance(img2.getWidth(), img2.getHeight(), Image.SCALE_FAST)); img2.setIcon(image2); img2.repaint(); jPanel5.add(img2); jPanel5.repaint(); } private void edgeMap() { Imgproc.Canny(gray, edge, 10, 12); Highgui.imwrite("edge.jpg", edge); img3 = new JLabel(""); img3.setSize(jPanel3.getSize()); image3 = new ImageIcon(new ImageIcon("D:\\Project_work\\CubeSolverSimulator\\edge.jpg").getImage() .getScaledInstance(img3.getWidth(), img3.getHeight(), Image.SCALE_FAST)); img3.setIcon(image3); img3.repaint(); jPanel3.add(img3); jPanel3.repaint(); ; } private void getContour() { Mat dilate = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(7, 7)); Imgproc.dilate(edge, edge, dilate); Imgproc.dilate(edge, edge, dilate); Highgui.imwrite("dilate.jpg", edge); List<MatOfPoint> contours = new ArrayList<>(); Imgproc.findContours(edge, contours, new Mat(), Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE); Imgproc.drawContours(contour, contours, -1, new Scalar(255, 255, 255)); Highgui.imwrite("Contour.jpg", contour); img4 = new JLabel(""); img4.setSize(jPanel7.getSize()); image4 = new ImageIcon(new ImageIcon("D:\\Project_work\\CubeSolverSimulator\\dilate.jpg").getImage() .getScaledInstance(img4.getWidth(), img4.getHeight(), Image.SCALE_FAST)); img4.setIcon(image4); img4.repaint(); jPanel7.add(img4); jPanel7.repaint(); findRect(contours); } private void findRect(List<MatOfPoint> contours) { int j = 0; temp = blured.clone(); List<Rect> roi = new ArrayList<>(); for (int i = 0; i < contours.size(); i++) { Rect rect = Imgproc.boundingRect(contours.get(i)); if (rect.height > 60 && rect.width > 60 && rect.height < 140 && rect.width < 140 && (rect.height <= (rect.width + 30) || rect.height >= (rect.width - 30))) { Core.rectangle(temp, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height), new Scalar(0, 255, 0), 2); j++; roi.add(rect); // System.out.println(rect.x+" "+rect.y); } } Highgui.imwrite("rect.jpg", temp); //System.out.println(j+" "+roi.size()); filterOverlap(roi); } private void filterOverlap(List<Rect> roi) { Mat filtered = blured.clone(); for (int i = 0; i < roi.size(); i++) { for (int j = i + 1; j < roi.size(); j++) { if ((roi.get(i).x >= roi.get(j).x - 100 && roi.get(i).x <= roi.get(j).x + 100) && (roi.get(i).y >= roi.get(j).y - 100 && roi.get(i).y <= roi.get(j).y + 100)) { if (roi.get(i).area() > roi.get(j).area()) { roi.remove(i); } else { roi.remove(j); } } } } //System.out.println("Final Size: "+roi.size()); for (int i = 0; i < roi.size(); i++) { // System.out.println() Rect rect = roi.get(i); Core.rectangle(filtered, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height), new Scalar(0, 255, 255), 2); } Highgui.imwrite("filteredrect.jpg", filtered); img5 = new JLabel(""); img5.setSize(jPanel2.getSize()); image5 = new ImageIcon(new ImageIcon("D:\\Project_work\\CubeSolverSimulator\\filteredrect.jpg").getImage() .getScaledInstance(img5.getWidth(), img5.getHeight(), Image.SCALE_FAST)); img5.setIcon(image5); img5.repaint(); jPanel2.add(img5); jPanel2.repaint(); reorderContours(roi); findAvg(roi); } private void reorderContours(List<Rect> roi) { Rect temp = new Rect(); for (int i = 0; (i < roi.size() - 1); i++) { for (int j = 0; j < (roi.size() - 1); j++) { if (roi.get(j).y > roi.get(j + 1).y) { temp = roi.get(j); roi.set(j, roi.get(j + 1)); roi.set(j + 1, temp); } } } for (int i = 0; i < (roi.size() / 3); i++) { for (int j = (i * 3); j < (i + 1) * 3; j++) { for (int k = (i * 3); k < ((i + 1) * 3) - 1; k++) { if (roi.get(k).x > roi.get(k + 1).x) { temp = roi.get(k); roi.set(k, roi.get(k + 1)); roi.set(k + 1, temp); } } } } } private void findAvg(List<Rect> roi) { cols = new int[9]; for (int i = 0; i < roi.size(); i++) { Mat ri = new Mat(blured, roi.get(i)); ri.convertTo(ri, -1, 1.0); Highgui.imwrite("extract" + i + ".jpg", ri); Scalar clr = new Scalar(0, 0, 0); clr = Core.mean(ri); System.out.println("old col: " + clr); if (clr.val[0] > 30) clr.val[0] = clr.val[0] - 30; else clr.val[0] = 0; //if(clr.val[2]<200) // clr.val[2]=clr.val[2]+20; //else // clr.val[0]=0; System.out.println("new col: " + clr); getDistance(clr, i); } displayLabel(); } private void getDistance(Scalar clr, int s) { double min = 0, dis; int col = 0; Scalar dist = new Scalar(0, 0, 0); //initialise standards dynamically Scalar std[] = { new Scalar(200, 0, 0), new Scalar(0, 200, 0), new Scalar(0, 0, 185), new Scalar(0, 160, 200), new Scalar(0, 80, 200), new Scalar(200, 200, 200) }; //blue, green, red, yellow, orange, white for (int i = 0; i < std.length; i++) { dist.val[0] = clr.val[0] - std[i].val[0]; dist.val[1] = clr.val[1] - std[i].val[1]; dist.val[2] = clr.val[2] - std[i].val[2]; dis = Math.sqrt((dist.val[0] * dist.val[0] + dist.val[1] * dist.val[1] + dist.val[2] * dist.val[2])); if (i == 0) { min = dis; col = i; } else if (dis < min) { min = dis; col = i; } } System.out.println(col); cols[s] = col; } private void displayLabel() { jLabel9.setText(colors[cols[0]]); jLabel10.setText(colors[cols[1]]); jLabel11.setText(colors[cols[2]]); jLabel12.setText(colors[cols[3]]); jLabel13.setText(colors[cols[4]]); jLabel14.setText(colors[cols[5]]); jLabel15.setText(colors[cols[6]]); jLabel16.setText(colors[cols[7]]); jLabel17.setText(colors[cols[8]]); } }