java - Opencv java - 将图像加载到 GUI

标签 java swing user-interface opencv

我正在使用 Java Opencv-2.4.4 和 swing GUI 开发应用程序。问题是我无法找到任何解决方案,它显示了如何将处理后的图像(保存在 Mat 对象中)打印到 java swing GUI 的有效方法。目前我正在使用这个笨拙的解决方案:

javax.swing.JLabel outputImage;
outputImage.setIcon(new javax.swing.ImageIcon("/home/username/Output.png"));

private void sliderStateChanged(javax.swing.event.ChangeEvent evt) { 
       .
       .
  Mat canny; // Here is saved what I want to plot
  String filename = "/home/username/Output.png";
  Highgui.imwrite(filename, canny);  // write to disk
  outputImage.setIcon(new ImageIcon(ImageIO.read(new File(filename)))); //update Icon
       .
       .
}

当用户更改某些值、输入等时,在 GUI 中我必须覆盖磁盘上的 Output.png 并使用磁盘中的新图像更新 jLabel。

有没有更优雅/更有效的解决方案?是否可以将 Mat 对象直接绘制或转换为 CanvasImage 或任何可打印为 swing 图像的对象?

最佳答案

是的,有更优雅的方式来做到这一点。您可以将 Mat 转换为 BufferedImage 类型,然后使用 swing 加载它。将其转换为缓冲图像的代码是:

    Mat image_tmp = your image

    MatOfByte matOfByte = new MatOfByte();

    Highgui.imencode(".jpg", image_tmp, matOfByte); 

    byte[] byteArray = matOfByte.toArray();
    BufferedImage bufImage = null;

    try {

        InputStream in = new ByteArrayInputStream(byteArray);
        bufImage = ImageIO.read(in);
    } catch (Exception e) {
        e.printStackTrace();
    }

然后你就可以在你的 GUI 对象中绘制它了:

g.drawImage(bufImage , 0, 0, null);

其中 g 是图形类型

希望这对您有所帮助。

关于java - Opencv java - 将图像加载到 GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15670933/

相关文章:

android - 主线程使用

c# - WPF 中是否有 C# 的 MVC 模式

python - 如何在窗口中像 exe 一样为 Tkinter 构建一个包?

java - 如何将程序中的变量分配给 Swing 中的图标?

java - 如何在Java中映射Paint中的颜色数组?

java - 如何多次在第二个窗口而不是另一个打开的窗口上获取结果?

java - 准备语句错误: Parameter 12 undefined

java - 如何在 java 中创建一个真正的单例?

java - Java 中的 Array.toString 数据处理

java - Tomcat 安装目录无效。它缺少预期的文件或文件夹 tcruntime-ctl.sh