有 Java 编程相关的问题?

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

java使用jframe在mat中显示图像(OpenCV 3.00)

如何在JFrame中显示Mat图像SetIcon()不接受mat参数。在显示之前,应在OpenCV 3.00中使用图像。但是OpenCV只能打开mat图像。有什么方法可以转换图像吗

public void displayImage()
{            
    Mat image = Imgcodecs.imread(getClass().getResource("lena.png").getPath());

    JFrame frame=new JFrame();
    frame.setLayout(new FlowLayout());           
    JLabel lbl=new JLabel();
    lbl.setIcon(image);
    frame.add(lbl);       
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

} 

我确实找到了转换它的代码,但是它有highgui,这已经不在OpenCV 3.00中了

MatOfByte byteMat = new MatOfByte();
Highgui.imencode(".bmp", mat, byteMat);
return new Image(new ByteArrayInputStream(byteMat.toArray()));

共 (1) 个答案

  1. # 1 楼答案

    将垫子转换为BuffereImage,然后在面板、画布或类似区域上绘制:

    public static BufferedImage bufferedImage(Mat m) {
        int type = BufferedImage.TYPE_BYTE_GRAY;
        if ( m.channels() > 1 ) {
            type = BufferedImage.TYPE_3BYTE_BGR;
        }
        BufferedImage image = new BufferedImage(m.cols(),m.rows(), type);
        m.get(0,0,((DataBufferByte)image.getRaster().getDataBuffer()).getData()); // get all the pixels
        return image;
    }