javacv開發詳解之1:調用本機攝像頭視頻

前言: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

javacv官方github維護地址:https://github.com/bytedeco/javacv
一、使用最新的javacv1.4.4
(注意:從其餘地方下載的依賴包請積極開心的替換爲官方jar包和博主提供jar包;若是使用其餘jar包版本而致使出錯,不要急着找博主問爲啥會報錯,先把jar包替換了再試試看)
(1)使用maven添加依賴

      <dependency>
        <groupId>org.bytedeco</groupId>
        <artifactId>javacv-platform</artifactId>
        <version>1.4.4</version>
      </dependency>

 
(2)使用gradle添加依賴

    dependencies {
        compile group: 'org.bytedeco', name: 'javacv-platform', version: '1.4.4'
      }

 
(3)使用本地jar包方式

最新版實在太大,須要下載全量包的請到官方github.com/bytedeco/javacv下載

javaCV1.3.3版本下載(全量包,文件名:javacv-platform-1.3.3-bin.zip,大小:212M):http://download.csdn.net/download/eguid_1/10146035

javaCV1.3版本下載:

一、javacv1.3核心包:http://download.csdn.net/detail/eguid_1/9716960(包含javacv.jar,javacpp.jar和javacv-platform.jar)

二、javacv1.3-opencv包集合:http://download.csdn.net/detail/eguid_1/9716965

三、javacv1.3-ffmpeg包集合:http://download.csdn.net/detail/eguid_1/9719323

javaCV1.3全部jar包集合:http://download.csdn.net/detail/eguid_1/9719343

javaCV1.2全部jar包集合在這裏下載:http://download.csdn.net/album/detail/3171

 

如下部分爲javacv1.2版本,再也不建議下載

基礎依賴包:javacv.jar;javacpp.jar(必須是1.2以上版本)

 

jar包使用須知:

windows x64平臺用到的opencv依賴:opencv.jar;oepncv-windows-x86_64.jar(其餘平臺替換爲對應的jar包便可)。

補充:

一、若是是蘋果mac系統,把oepncv-windows-x86_64.jar替換成這個包opencv-macosx-x86_64.jar
二、linux平臺替換成這個包:opencv-linux-x86_64.jar  

三、安卓平臺替換成opencv-android-arm.jar  或者opencv-android-x86.jar

maven和gradle方式若是想要減少依賴包大小,則須要手動進行排除不須要的平臺依賴便可

 
二、爲何不須要安裝opencv?

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

(好比oepncv-windows-x86_64.jar就是典型的64位windows環境依賴包)

 
三、java經過javacv獲取windows的攝像頭視頻

最終調用的攝像頭實時視頻圖像界面:

預覽本機攝像頭視頻圖像的簡單實現:

 

    /**
     * 文件名: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
     */
     
    public class JavavcCameraTest
    {
    public static void 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毫秒刷新一次圖像
        }
    }
    }

java

相關文章
相關標籤/搜索