terça-feira, 11 de junho de 2013

OpenCV Java Binding -> Getting frames from webcam

Main Class


import java.awt.Image;
import java.io.ByteArrayInputStream;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JFrame;

import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.MatOfByte;
import org.opencv.highgui.Highgui;
import org.opencv.highgui.VideoCapture;
import org.opencv.objdetect.Objdetect;

  
public class Main {

 public static void main(String[] args) throws IOException, InterruptedException {
        System.loadLibrary("opencv_java245");
        ImageViewer imageViewer = new ImageViewer();
        JFrame window = new JFrame();
        window.add(imageViewer);
        window.pack();
        window.setVisible(true);
        
        
        VideoCapture webSource = new VideoCapture(0);
        Thread.sleep(2000);
        
        
  if (!webSource.isOpened()) {
   System.out.println("Error Initializing camera");
  } else {
   System.out.println("Iniciando camera");
  }
        
        Mat frame = new Mat();
        MatOfByte mem = new MatOfByte();
        
        while(webSource.grab()){
         try{
         webSource.retrieve(frame);
         Highgui.imencode(".png", frame, mem);
         Image im = ImageIO.read(new ByteArrayInputStream(mem.toArray()));
         imageViewer.updateImage(im);
         System.out.println("Frame grabbed");
         }catch(Exception ex){
          ex.printStackTrace();
          System.out.println("Error");
         }
        }
        
        System.out.println("Terminated");
  System.exit(0);    
 }
}

ImageViewer Class

import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;

import javax.swing.JPanel;


public class ImageViewer extends JPanel{
  BufferedImage buff;
 
 @Override
 public void paint(Graphics g) {
  if(buff!=null)
   g.drawImage(buff, 0, 0, getWidth(), getHeight(), 0, 0, buff.getWidth(), buff.getHeight(), null);
  
  
 }

 public void updateImage(Image im) {
  buff = (BufferedImage) im;
  repaint();
  invalidate();
 }
 
 
}

Nenhum comentário:

Postar um comentário