1. 程式人生 > >javacv開發詳解之1:呼叫本機攝像頭視訊(建議使用javaCV1.3版本)

javacv開發詳解之1:呼叫本機攝像頭視訊(建議使用javaCV1.3版本)

javaCV系列文章:

補充篇:

前言:javacv開發包是用於支援java多媒體開發的一套開發包,可以適用於本地多媒體(音視訊)呼叫以及音視訊,圖片等檔案後期操作(圖片修改,音視訊解碼剪輯等等功能),這裡只使用最簡單的本地攝像頭呼叫來演示一下javacv的基礎功能

重要:

建議使用最新javaCV1.3版本,該版本已解決更早版本中已發現的大部分bug

javacv系列文章使用6個jar包:

javacv.jar,javacpp.jar,ffmpeg.jar,ffmpeg-系統平臺.jar,OpenCV.jar,opencv-系統平臺.jar。

其中ffmpeg-系統平臺.jar,opencv-系統平臺.jar中的系統平臺根據開發環境或者

測試部署環境自行更改為對應的jar包,比如windows7 64位系統替換為ffmpeg-x86-x64.jar

為什麼要這樣做:因為ffmpeg-系統平臺.jar中存放的是c/c++本地so/dll庫,而ffmpeg.jar就是使用javacpp封裝的對應本地庫Java介面的實現,而javacpp就是基於jni的一個功能性封裝包,方便實現jni,javacv.jar就是對9個視覺庫進行了二次封裝,但是實現的功能有限,所以建議新手先熟悉openCV和ffmpeg這兩個C/C++庫的API後再來看javaCV思路就會很清晰了。

須知: javacv系列文章預設音視訊處理使用ffmpeg,影象處理使用opencv,攝像頭抓取使用opencv

javaCV1.3版本下載:

1、使用最新的javacv1.3

(注意:從其他地方下載的依賴包請積極開心的替換為官方jar包和博主提供jar包;如果使用其他jar包版本而導致出錯,不要急著找博主問為啥會報錯,先把jar包替換了再試試看)

以下部分為javacv1.2版本,不再建議下載

補充:

2、為什麼不需要安裝opencv?

從javacv0.8開始,已經不需要本地安裝opencv,直接通過引用opencv對應的系統平臺的引用包即可。

3、java通過javacv獲取windows的攝像頭視訊

最終呼叫的攝像頭實時視訊:
程式碼只有那麼多: [java]
 view plain copy  print?在CODE上檢視程式碼片派生到我的程式碼片
  1. /** 
  2.  * 檔名:javavcCameraTest.java 
  3.  * 描述:呼叫windows平臺的攝像頭視窗視訊 
  4.  * 修改時間:2016年6月13日 
  5.  * 修改內容: 
  6.  */
  7. package cc.eguid.javacv;  
  8. import javax.swing.JFrame;  
  9. import org.bytedeco.javacv.CanvasFrame;  
  10. import org.bytedeco.javacv.OpenCVFrameConverter;  
  11. import org.bytedeco.javacv.FrameGrabber.Exception;  
  12. import org.bytedeco.javacv.OpenCVFrameGrabber;  
  13. /** 
  14.  * 呼叫本地攝像頭視窗視訊 
  15.  * @author eguid   
  16.  * @version 2016年6月13日   
  17.  * @see javavcCameraTest   
  18.  * @since  javacv1.2 
  19.  */
  20. publicclass JavavcCameraTest  
  21. {  
  22. publicstaticvoid main(String[] args) throws Exception, InterruptedException  
  23. {  
  24.     OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);    
  25.     grabber.start();   //開始獲取攝像頭資料
  26.     CanvasFrame canvas = new CanvasFrame("攝像頭");//新建一個視窗
  27.     canvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  28.     canvas.setAlwaysOnTop(true);  
  29.     while(true)  
  30.     {  
  31.         if(!canvas.isDisplayable())  
  32.         {//視窗是否關閉
  33.             grabber.stop();//停止抓取
  34.             System.exit(2);//退出
  35.         }  
  36.         canvas.showImage(grabber.grab());//獲取攝像頭影象並放到視窗上顯示, 這裡的Frame frame=grabber.grab(); frame是一幀視訊影象
  37.         Thread.sleep(50);//50毫秒重新整理一次影象
  38.     }  
  39. }  
  40. }