2013-05-11 99 views
25

对不起,如果我问一个愚蠢的问题,我正在尝试使用Java构建学习openCV。在opencv样本中,我发现在C++中有方法imshow或python中的showImage,但是我在opencv Java API中搜索,但找不到imshow方法。在opencv中imshow的等效方法Java build

使用Java构建的opencv中的imshow()和waitKey()的平等方法是什么?

回答

8

还没有Java highgui包装(link)。你应该使用swing或swt来显示图像。请参阅:Opencv java - Load image to GUI

+0

非常感谢答案,那么waitKey方法呢?与thread.sleep是一样的吗? – Orochi 2013-05-11 09:43:51

+0

你实际上并不需要它...... – ArtemStorozhuk 2013-05-11 09:52:30

+0

我明白了,呃,还有一件事,你知道如何启动一个摄像头,并从中获得实时信号。我的意思是,到目前为止,我设法通过摄像头捕捉到我的脸并检测到它,现在我想要做的是打开我的webcamera并检测我的脸而不捕捉它,它就像这样http://www.youtube.com/watch?v = HTk_UwAYzVk – Orochi 2013-05-11 12:44:16

26
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.getContentPane().add(new JLabel(new ImageIcon(bufImage))); 
     frame.pack(); 
     frame.setVisible(true); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
+0

Java中已经没有更多的'HighGUI'模块可以使用'Imgcodecs' insead – 2018-01-26 08:51:01

1

我做了Swing和AWT的东西。

首先,通过imencode从垫IMG得到BufferedImageImageIo.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

+0

尽管这个链接可能回答这个问题,但最好在这里包含答案的基本部分并提供参考链接。如果链接页面更改,则仅链接答案可能会失效。 - [来自评论](/ review/low-quality-posts/18294231) – 2017-12-19 02:24:40

+0

感谢汤姆阿兰达的审查。我重写我的内容。 – 2017-12-20 03:25:47

+0

这是一个重大的改进。 :) – 2017-12-20 03:50:35