javacv開發詳解之1:呼叫本機攝像頭視訊(建議使用javaCV1.3版本)
阿新 • • 發佈:2019-02-07
javaCV系列文章:
補充篇:
前言:javacv開發包是用於支援java多媒體開發的一套開發包,可以適用於本地多媒體(音視訊)呼叫以及音視訊,圖片等檔案後期操作(圖片修改,音視訊解碼剪輯等等功能),這裡只使用最簡單的本地攝像頭呼叫來演示一下javacv的基礎功能
重要:
建議使用最新javaCV1.3版本,該版本已解決更早版本中已發現的大部分bugjavacv系列文章使用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,攝像頭抓取使用opencvjavaCV1.3版本下載:
1、使用最新的javacv1.3
(注意:從其他地方下載的依賴包請積極開心的替換為官方jar包和博主提供jar包;如果使用其他jar包版本而導致出錯,不要急著找博主問為啥會報錯,先把jar包替換了再試試看)
以下部分為javacv1.2版本,不再建議下載
補充:
2、為什麼不需要安裝opencv?
從javacv0.8開始,已經不需要本地安裝opencv,直接通過引用opencv對應的系統平臺的引用包即可。
3、java通過javacv獲取windows的攝像頭視訊
最終呼叫的攝像頭實時視訊:程式碼只有那麼多: [java]
- /**
- * 檔名:javavcCameraTest.java
- * 描述:呼叫windows平臺的攝像頭視窗視訊
- * 修改時間:2016年6月13日
- * 修改內容:
- */
- package cc.eguid.javacv;
- import javax.swing.JFrame;
- import org.bytedeco.javacv.CanvasFrame;
- import org.bytedeco.javacv.OpenCVFrameConverter;
- import org.bytedeco.javacv.FrameGrabber.Exception;
- import org.bytedeco.javacv.OpenCVFrameGrabber;
- /**
- * 呼叫本地攝像頭視窗視訊
- * @author eguid
- * @version 2016年6月13日
- * @see javavcCameraTest
- * @since javacv1.2
- */
- publicclass JavavcCameraTest
- {
- publicstaticvoid main(String[] args) throws Exception, InterruptedException
- {
- OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
- grabber.start(); //開始獲取攝像頭資料
- CanvasFrame canvas = new CanvasFrame("攝像頭");//新建一個視窗
- canvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- canvas.setAlwaysOnTop(true);
- while(true)
- {
- if(!canvas.isDisplayable())
- {//視窗是否關閉
- grabber.stop();//停止抓取
- System.exit(2);//退出
- }
- canvas.showImage(grabber.grab());//獲取攝像頭影象並放到視窗上顯示, 這裡的Frame frame=grabber.grab(); frame是一幀視訊影象
- Thread.sleep(50);//50毫秒重新整理一次影象
- }
- }
- }