Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

hi, Ioanna, found this on my disk, hope it helps !

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.highgui.VideoCapture;
import org.opencv.imgproc.Imgproc;

import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.applet.*;

public final class pxl extends Applet implements Runnable {
    static{ System.loadLibrary(Core.NATIVE_LIBRARY_NAME); }

    VideoCapture cap;    // capture
    byte [] b;           // pixel bytes
    BufferedImage image; // our drawing canvas
    private Thread idx_Thread;

    public pxl() {
        init();
    }
    public void init()
    {                
        cap = new VideoCapture(0); // 1st webcam
//        boolean ok = cap.open("d:/video/cam9.asf");
    }

    public void start() {
        if (idx_Thread == null)    {
            idx_Thread = new Thread(this);
            idx_Thread.start();
        }
    }

    public void stop() {
        if (idx_Thread != null)    {
            idx_Thread.stop();
            idx_Thread = null;
        }
    }

    public void run() {
        Mat m = new Mat();
        while(true) {
            if (cap.read(m) ) {
                convert(m);                
                repaint();
            } else break;
            try    {
                Thread.sleep(50);
            } catch (InterruptedException e){}
        }
    }
    public void convert(Mat m)
    {            
        Mat m2 = new Mat();    
        int type = BufferedImage.TYPE_BYTE_GRAY;
        if ( m.channels() > 1 ) {
            Imgproc.cvtColor(m,m2,Imgproc.COLOR_BGR2RGB);
            type = BufferedImage.TYPE_3BYTE_BGR;
        }
        int blen = m.channels()*m.cols()*m.rows();
        if ( b == null || b.length != blen)
            b = new byte[blen];
        m2.get(0,0,b);
        image = new BufferedImage(m.cols(),m.rows(), type);
        image.getRaster().setDataElements(0, 0, m.cols(),m.rows(), b);    
    }

    public synchronized void update(Graphics g)    {
        g.drawImage(image,0,0,this);    
    }        

    public static void main( String [] args ) {
        pxl win = new pxl();
        win.start();
        Frame f = new Frame();
        f.addWindowListener( new WindowAdapter() {
            public void windowClosing(WindowEvent e) {  System.exit(0);  }
        });
        f.add(win);
        f.setSize( 400, 400 );
        f.show();
    }
}

hi, Ioanna, found this on my disk, hope it helps !

actually, showing an image in a window is a bit more involved in java, as you need a container for the window ( a Frame ), threading, etc.

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.highgui.VideoCapture;
import org.opencv.imgproc.Imgproc;

import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.applet.*;

public final class pxl extends Applet implements Runnable {
    static{ System.loadLibrary(Core.NATIVE_LIBRARY_NAME); }

    VideoCapture cap;    // capture
    byte [] b;           // pixel bytes
    BufferedImage image; // our drawing canvas
    private Thread idx_Thread;

    public pxl() {
        init();
    }
    public void init()
    {                
        cap = new VideoCapture(0); // 1st webcam
//        boolean ok = cap.open("d:/video/cam9.asf");
    }

    public void start() {
        if (idx_Thread == null)    {
            idx_Thread = new Thread(this);
            idx_Thread.start();
        }
    }

    public void stop() {
        if (idx_Thread != null)    {
            idx_Thread.stop();
            idx_Thread = null;
        }
    }

    public void run() {
        Mat m = new Mat();
        while(true) {
            if (cap.read(m) ) {
                convert(m);                
                repaint();
            } else break;
            try    {
                Thread.sleep(50);
            } catch (InterruptedException e){}
        }
    }
    public void convert(Mat m)
    {            
        Mat m2 = new Mat();    
        int type = BufferedImage.TYPE_BYTE_GRAY;
        if ( m.channels() > 1 ) {
            Imgproc.cvtColor(m,m2,Imgproc.COLOR_BGR2RGB);
            type = BufferedImage.TYPE_3BYTE_BGR;
        }
        int blen = m.channels()*m.cols()*m.rows();
        if ( b == null || b.length != blen)
            b = new byte[blen];
        m2.get(0,0,b);
        image = new BufferedImage(m.cols(),m.rows(), type);
        image.getRaster().setDataElements(0, 0, m.cols(),m.rows(), b);    
    }

    public synchronized void update(Graphics g)    {
        g.drawImage(image,0,0,this);    
    }        

    public static void main( String [] args ) {
        pxl win = new pxl();
        win.start();
        Frame f = new Frame();
        f.addWindowListener( new WindowAdapter() {
            public void windowClosing(WindowEvent e) {  System.exit(0);  }
        });
        f.add(win);
        f.setSize( 400, 400 );
        f.show();
    }
}

hi, Ioanna, found this on my disk, hope it helps !

actually, showing an image in a window is a bit more involved in java, as you need a container for the window ( a Frame ), threading, etc.

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.highgui.VideoCapture;
import org.opencv.imgproc.Imgproc;

import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.applet.*;

public final class pxl extends Applet implements Runnable {
    static{ System.loadLibrary(Core.NATIVE_LIBRARY_NAME); }

    VideoCapture cap;    // capture
    byte [] b;           // pixel bytes
    BufferedImage image; // our drawing canvas
    private Thread idx_Thread;

    public pxl() {
        init();
    }
    public void init()
    {                
        cap = new VideoCapture(0); // 1st webcam
//        boolean ok = cap.open("d:/video/cam9.asf");
    }

    public void start() {
        if (idx_Thread == null)    {
            idx_Thread = new Thread(this);
            idx_Thread.start();
        }
    }

    public void stop() {
        if (idx_Thread != null)    {
            idx_Thread.stop();
            idx_Thread = null;
        }
    }

    public void run() {
        Mat m = new Mat();
        while(true) {
            if (cap.read(m) ) {
                //
                // your image processing here !
                //
                convert(m);  // mat to BufferedImage
                repaint();
            } else break;
            try    {
                Thread.sleep(50);
            } catch (InterruptedException e){}
        }
    }
    public void convert(Mat m)
    {            
        Mat m2 = new Mat();    
        int type = BufferedImage.TYPE_BYTE_GRAY;
        if ( m.channels() > 1 ) {
            Imgproc.cvtColor(m,m2,Imgproc.COLOR_BGR2RGB);
            type = BufferedImage.TYPE_3BYTE_BGR;
        }
        int blen = m.channels()*m.cols()*m.rows();
        if ( b == null || b.length != blen)
            b = new byte[blen];
        m2.get(0,0,b);
        image = new BufferedImage(m.cols(),m.rows(), type);
        image.getRaster().setDataElements(0, 0, m.cols(),m.rows(), b);    
    }

    public synchronized void update(Graphics g)    {
        g.drawImage(image,0,0,this);    
    }        

    public static void main( String [] args ) {
        pxl win = new pxl();
        win.start();
        Frame f = new Frame();
        f.addWindowListener( new WindowAdapter() {
            public void windowClosing(WindowEvent e) {  System.exit(0);  }
        });
        f.add(win);
        f.setSize( 400, 400 );
        f.show();
    }
}