2012-06-15 57 views
0

我想要捕捉並顯示來自webacam的視頻。爲了捕捉,我使用this JavaCV code,它給出IplImage,可以轉換爲BufferedImage。如何在JFrame上顯示此圖像?如何在JFrame上顯示視頻(捕獲爲BufferedImage)?

注:我想顯示的視頻不是單一的一個圖像,因爲它是從網絡攝像頭

+0

[的Java Swing?:如何將圖像添加到JPanel]的可能的複製(http://stackoverflow.com/questions/299495/java-swing-how-to-add-an-image- jpanel)另外,既然你使用'Swing',你應該使用'JLabel',因爲沒有任何理由(但你可能想)自己實現繪圖。請參閱[答案的詳細信息](http://stackoverflow.com/a/2706730/613495),但[另一個示例是這裏](http://stackoverflow.com/a/9403763/613495)。 – Boro

+0

@Boro由於我想持續捕獲和繪製圖像,會不會有使用'JLabel'的性能?這也使這個問題稍有不同。 –

+0

現在不要擔心表演。首先構建捕獲和顯示。然後你可以在你的代碼中自己測試兩種方法。 – Boro

回答

0

捕獲使用JavaCV LIB它可以繪製與Graphics類在JPanel中的BufferedImage不使用IplImages即圖像應當不斷更新。

下面是一個在JFrame中顯示來自JPanel中的webcam的圖像的示例。

try { 
     OpenCVFrameGrabber camera = new OpenCVFrameGrabber(0); 
     OpenCVFrameConverter.ToMat converter = new OpenCVFrameConverter.ToMat(); 
     Java2DFrameConverter converterBuffered = new Java2DFrameConverter(); 

     Frame capturedFrame = null; 
     Mat matImage = null; 
     camera.start(); 
     while ((capturedFrame = camera.grab()) != null) { 
      matImage = converter.convertToMat(capturedFrame); 

      BufferedImage bufferedImage = converterBuffered.convert(capturedFrame); 

      Graphics g = imageView.getGraphics(); //getting the Graphics Class of the JPanel named as imageView 
      g.drawImage(bufferedImage, 10,10, bufferedImage.getWidth(), bufferedImage.getHeight(),imageView); //this imageView is a JPanel component 

     } 
     camera.stop(); 

    } catch (FrameGrabber.Exception ex) { 
     System.out.println("Fail to capture frame"); 
     //this catch clause refer to errors on opening the camera or failure on capture of frame. 
    }