package developer.image; import java.awt.EventQueue; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import java.awt.image.BufferedImage; import java.io.IOException; import java.net.URL; import javax.swing.JButton; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; public class TestPanel extends JFrame { private JPanel panel_2; private JPanel panel; private JPanel panel_1; private BufferedImage img; JLabel picLabel = new JLabel(); JLabel picLabel1 = new JLabel(); private JButton btnFindCtr; private int[][] ctrMatrix; ImageUtils imageUtils = new ImageUtils(); final String url = "http://127.0.0.1:5080/oculusPrime/frameGrabHTTP"; /* * INSTRUCTIONS * run with red5 running, and streaming camera at 320x480 (medium) * use 'record' to remember view * use 'find' to find offset of remembered view from previous view (previous ctr indicated by dot) */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { TestPanel frame = new TestPanel(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public TestPanel() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 692, 563); JPanel contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); panel = new JPanel(); panel.setBounds(10, 274, 320, 240); contentPane.add(panel); panel_1 = new JPanel(); panel_1.setBounds(340, 274, 320, 240); contentPane.add(panel_1); panel_2 = new JPanel(); panel_2.setBounds(10, 11, 320, 240); contentPane.add(panel_2); JButton btnRecordCtr = new JButton("Record Ctr"); btnRecordCtr.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { recordCtr(); } }); btnRecordCtr.setBounds(340, 11, 100, 23); contentPane.add(btnRecordCtr); btnFindCtr = new JButton("Find Ctr"); btnFindCtr.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { findCtr(); } }); btnFindCtr.setBounds(340, 45, 100, 23); contentPane.add(btnFindCtr); JButton btnNewButton = new JButton("edges"); btnNewButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { edges(); } }); btnNewButton.setBounds(340, 79, 100, 23); contentPane.add(btnNewButton); JButton btnEdgesBlur = new JButton("edges, blur"); btnEdgesBlur.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { edgeswithblur(); } }); btnEdgesBlur.setBounds(340, 113, 100, 23); contentPane.add(btnEdgesBlur); initialize(); } private void initialize() { final JLabel picLabel2; try { img = ImageIO.read(new URL(url)); } catch (IOException e2) { e2.printStackTrace(); } picLabel2 = new JLabel(new ImageIcon(img)); panel_2.add(picLabel2); panel_2.repaint(); // continuous framegrabs to panel_2 new Thread(new Runnable() { public void run() { try { while(true) { img = ImageIO.read(new URL(url)); picLabel2.setIcon(new ImageIcon(img)); panel_2.repaint(); } } catch (Exception e) { e.printStackTrace(); } } }).start(); panel.add(picLabel); panel_1.add(picLabel1); } private void recordCtr() { int[] greypxls = imageUtils.convertToGrey(img); ctrMatrix = imageUtils.convertToMatrix(greypxls, img.getWidth(), img.getHeight()); BufferedImage gi = imageUtils.intToImage(greypxls, img.getWidth(), img.getHeight()); //put red dot in ctr int red = (255<<16) + (0<<8) + 0; int x = img.getWidth()/2 + imageUtils.matrixres/2; int y = img.getHeight()/2 + imageUtils.matrixres/2; gi.setRGB(x,y, red); gi.setRGB(x-1,y, red); gi.setRGB(x+1,y, red); gi.setRGB(x,y-1, red); gi.setRGB(x,y+1, red); picLabel.setIcon(new ImageIcon(gi)); panel.repaint(); } private void findCtr() { int[] greypxls = imageUtils.convertToGrey(img); int[][] matrix = imageUtils.convertToMatrix(greypxls, img.getWidth(), img.getHeight()); int[] ctr = imageUtils.findCenter(matrix, ctrMatrix, img.getWidth(), img.getHeight()); BufferedImage imgwithctr = imageUtils.intToImage(greypxls, img.getWidth(), img.getHeight()); //put red dot at returned point if (ctr[0] > 0 && ctr[0] < img.getWidth() && ctr[1] > 0 && ctr[1] < img.getHeight()) { int red = (255<<16) + (0<<8) + 0; imgwithctr.setRGB(ctr[0], ctr[1], red); imgwithctr.setRGB(ctr[0]-1, ctr[1], red); imgwithctr.setRGB(ctr[0]+1, ctr[1], red); imgwithctr.setRGB(ctr[0], ctr[1]-1, red); imgwithctr.setRGB(ctr[0], ctr[1]+1, red); } picLabel1.setIcon(new ImageIcon(imgwithctr)); panel_1.repaint(); } private void edges() { int[] greypxls = imageUtils.convertToGrey(img); int[] edgepxls = imageUtils.edges(greypxls, img.getWidth(), img.getHeight()); BufferedImage greyimg = imageUtils.intToImage(greypxls, img.getWidth(), img.getHeight()); picLabel.setIcon(new ImageIcon(greyimg)); panel.repaint(); BufferedImage edgeimg = imageUtils.intToImage(edgepxls, img.getWidth(), img.getHeight()); picLabel1.setIcon(new ImageIcon(edgeimg)); panel_1.repaint(); } private void edgeswithblur() { img = imageUtils.blur(img); int[] greypxls = imageUtils.convertToGrey(img); int[] edgepxls = imageUtils.edges(greypxls, img.getWidth(), img.getHeight()); BufferedImage greyimg = imageUtils.intToImage(greypxls, img.getWidth(), img.getHeight()); picLabel.setIcon(new ImageIcon(greyimg)); panel.repaint(); BufferedImage edgeimg = imageUtils.intToImage(edgepxls, img.getWidth(), img.getHeight()); picLabel1.setIcon(new ImageIcon(edgeimg)); panel_1.repaint(); } }