2013-05-11 101 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