在OpenCV Java中使用Mat显示图像

时间:2014-10-22 19:55:14

标签: java opencv mat

我正在使用Java编写我的第一个OpenCV程序,我想问一下,是否可以仅使用Mat从文件中加载和显示图像? 我在这个网站上找到了解决方案 http://answers.opencv.org/question/31505/how-load-and-display-images-with-java-using-opencv/ 但它之前改变了Mat到Image。 我会感激任何提示

3 个答案:

答案 0 :(得分:5)

这是一个古老的问题,但是对于仍然面临相同问题的人,现在在 HighGui 静态对象下的Java OpenCV中实现了“ imshow”(我正在使用4.1.1版) 。
因此,您首先要像这样导入它:

import org.opencv.highgui.HighGui;

,然后显示如下图像:

HighGui.imshow("Image", frame);
HighGui.waitKey();

其中“框架”是您的OpenCV素材对象。

答案 1 :(得分:4)

您可以使用下一个代码将cvMat元素转换为java元素:B​​ufferedImage或Image:

 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/

答案 2 :(得分:1)

不,在java中没有imshow等价物。请参阅this链接。