2014-10-22 1 views
2

Я пишу свою первую программу в OpenCV на Java, и я хотел бы спросить, возможно ли загружать и отображать изображение из файла только с помощью Mat? Я нашел решение на этом сайте http://answers.opencv.org/question/31505/how-load-and-display-images-with-java-using-opencv/ , но он меняет Мат на изображение раньше. Буду признателен за любые советыПоказать изображение, используя Mat в OpenCV Java

+1

Я не понимаю эту проблему. Он никогда не преобразует коврик. Он создает окно с именем «изображение», и это окно используется для отображения мата. Вы не можете показать коврик без окна, чтобы показать его в –

ответ

2

Вы можете использовать следующий код для преобразования cvMat элемента в Java элемент: BufferedImage или изображение:

public BufferedImage Mat2BufferedImage(Mat m) { 
    // Fastest code 
    // 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; 
} 

А затем отобразить его:

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); 
} 

Источник: http://answers.opencv.org/question/10344/opencv-java-load-image-to-gui/