30

抱歉,如果我问的是一个愚蠢的问题,我正在尝试使用 Java 构建来学习 openCV。在 opencv 示例中,我发现 c++ 中有 imshow 方法或 python 中有 showImage 方法,但我在 opencv Java API 中搜索,我找不到 imshow 方法。

java构建的opencv中imshow()和waitKey()的相等方法是什么?

4

5 回答 5

28
public static void showResult(Mat img) {
    Imgproc.resize(img, img, new Size(640, 480));
    MatOfByte matOfByte = new MatOfByte();
    Highgui.imencode(".jpg", img, matOfByte);
    byte[] byteArray = matOfByte.toArray();
    BufferedImage bufImage = null;
    try {
        InputStream in = new ByteArrayInputStream(byteArray);
        bufImage = ImageIO.read(in);
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        frame.getContentPane().add(new JLabel(new ImageIcon(bufImage)));
        frame.pack();
        frame.setVisible(true);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
于 2013-09-07T06:23:57.677 回答
11

目前还没有 Java highgui 包装器(链接)。您应该使用 swing 或 swt 来显示图像。请参阅:Opencv java - 将图像加载到 GUI

于 2013-05-11T08:02:02.650 回答
7

这是 Java OpenCV 中 Imshow() 等价物的现成解决方案,使用简单。API 将如下所示:

Imshow im = new Imshow("标题");

im.showImage(matimage);

访问这里 https://github.com/master-atul/ImShow-Java-OpenCV

于 2014-02-18T21:39:51.437 回答
3

我用swing和awt做了一些东西。

首先,通过andBufferedImage从 Mat img获取imencodeImageIo.read

        MatOfByte mMatOfByte = new MatOfByte()
        imencode(".png", img, mMatOfByte);
        byte[] byteArray = mMatOfByte.toArray();
        InputStream in = new ByteArrayInputStream(byteArray);
        BufferedImage srcImage = ImageIO.read(in);

其次,将其更改为目标尺寸宽度和高度(w,h)并使用渲染提示在扩大或缩小情况下获得干净的图像。

            bufImage = new BufferedImage(w, h, srcImage.getType());
            Graphics2D g = bufImage.createGraphics();
            g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
            g.drawImage(srcImage, 0,0, w, h, 0, 0, srcImage.getWidth(), srcImage.getHeight(), null);

bufImage我在 JPanel 的paintComponent()方法中使用了目标。

对于waitKey(),我用过KeyEventDispatcher

于 2017-12-19T02:03:23.223 回答
2

你必须使用 java swings 或 awt 来显示图像..看看运行代码http://projectimageprocessing.blogspot.in/2013/05/introduction.html

于 2013-06-20T06:49:42.053 回答