【问题标题】:How to display OpenCV images in Java?如何在 Java 中显示 OpenCV 图像?
【发布时间】:2016-04-17 04:07:04
【问题描述】:

在开发计算机视觉Java 应用程序时,有时需要显示OpenCV Mat images。 那么如何在Java中显示这些OpenCV Mat images呢?

【问题讨论】:

标签: java opencv


【解决方案1】:

以下是我为此创建的代码的要点: https://gist.github.com/fernandoc1/c5105070fa6acf2d0128

import org.opencv.core.*;
import org.opencv.highgui.*;
import java.awt.*;
import javax.swing.*;
import java.awt.image.*;

public class DisplayImage
{
    static
    {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    }

    public static BufferedImage Mat2BufferedImage(Mat m)
    {
        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 static void displayImage(Image img)
    {   
        ImageIcon icon = new ImageIcon(img);
        JFrame frame = new JFrame();
        frame.setLayout(new FlowLayout());        
        frame.setSize(img.getWidth(null)+50, img.getHeight(null)+50);     
        JLabel lbl = new JLabel();
        lbl.setIcon(icon);
        frame.add(lbl);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public static void main(String[] args)
    {
        System.out.println(args[0]);
        Mat m = Highgui.imread(args[0]);
        BufferedImage bi = Mat2BufferedImage(m);
        displayImage(bi);
    }
}

编译运行:

all:
    javac -cp "/usr/share/OpenCV/java/opencv-248.jar" DisplayImage.java

run:
    LD_LIBRARY_PATH=/usr/lib/jni/ java -cp /usr/share/OpenCV/java/opencv-248.jar:. DisplayImage /path/to/image.png

在 Ubuntu 14.04 64bit 中测试

【讨论】:

  • 此代码与here 相同。为避免将其视为抄袭代码,请在您的回答中参考此链接。
猜你喜欢
  • 1970-01-01
  • 2014-12-18
  • 2013-10-31
  • 1970-01-01
  • 2018-07-06
  • 2016-11-20
  • 2011-07-21
  • 1970-01-01
  • 2023-03-03
相关资源
最近更新 更多