First time here? Check out the FAQ!

Ask Your Question
10

How to display image on JAVA release

asked Feb 27 '13

wolvican gravatar image

Hi everyone,

In new release OpenCV 2.4.4, how can I display image ( Mat ) on window using JAVA. I couldn't find the JAVA method from API?

Preview: (hide)

2 answers

Sort by » oldest newest most voted
5

answered Feb 27 '13

Window management from OpenCV highgui module is no wrapper to Java yet. You need to use some Java UI frameworks like SWING or wrap it to Java manually using JNI.

Preview: (hide)
4

answered Apr 22 '14

rafaoc gravatar image

updated Apr 22 '14

You can use the next code to transform a cvMat element into a java element: BufferedImage or Image:

    public BufferedImage Mat2BufferedImage(Mat m){
// source: http://answers.opencv.org/question/10344/opencv-java-load-image-to-gui/
// Fastest code
// The output can be assigned either to a BufferedImage or to an Image

    int type = BufferedImage.TYPE_BYTE_GRAY;
    if ( m.channels() > 1 ) {
        type = BufferedImage.TYPE_3BYTE_BGR;
    }
    int bufferSize = m.channels()*m.cols()*m.rows();
    byte [] b = new byte[bufferSize];
    m.get(0,0,b); // get all the pixels
    BufferedImage image = new BufferedImage(m.cols(),m.rows(), type);
    final byte[] targetPixels = ((DataBufferByte) image.getRaster().getDataBuffer()).getData();
    System.arraycopy(b, 0, targetPixels, 0, b.length);  
    return image;

}

And then display it with:

    public void displayImage(Image img2)
{   
    //BufferedImage img=ImageIO.read(new File("/HelloOpenCV/lena.png"));
    ImageIcon icon=new ImageIcon(img2);
    JFrame frame=new JFrame();
    frame.setLayout(new FlowLayout());        
    frame.setSize(img2.getWidth(null)+50, img2.getHeight(null)+50);     
    JLabel lbl=new JLabel();
    lbl.setIcon(icon);
    frame.add(lbl);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}
Preview: (hide)

Question Tools

1 follower

Stats

Asked: Feb 27 '13

Seen: 7,731 times

Last updated: Apr 22 '14