有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (3) 个答案

  1. # 1 楼答案

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

    import org.opencv.highgui.HighGui;
    

    然后显示图像,如下所示:

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

    其中“frame”是OpenCV mat对象

  2. # 2 楼答案

    您可以使用下面的代码将cvMat元素转换为java元素:BuffereImage或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/

  3. # 3 楼答案

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