JavaCV的攝像頭實戰之二:本地視窗預覽

程式設計師欣宸發表於2022-01-24

歡迎訪問我的GitHub

https://github.com/zq2599/blog_demos

內容:所有原創文章分類彙總及配套原始碼,涉及Java、Docker、Kubernetes、DevOPS等;

本篇概覽

編碼

  • 前文建立的simple-grab-push工程中已經準備好了父類AbstractCameraApplication,所以本篇繼續使用該工程,建立子類實現那些抽象方法即可

  • 編碼前先回顧父類的基礎結構,如下圖,粗體是父類定義的各個方法,紅色塊都是需要子類來實現抽象方法,所以接下來,我們們以本地視窗預覽為目標實現這三個紅色方法即可:

在這裡插入圖片描述

  • 新建檔案PreviewCamera.java,這是AbstractCameraApplication的子類,其程式碼很簡單,接下來按上圖順序依次說明

  • 先定義CanvasFrame型別的成員變數previewCanvas,這是展示視訊幀的本地視窗:

protected CanvasFrame previewCanvas
  • 然後是初始化操作,可見是previewCanvas的例項化和引數設定:
@Override
    protected void initOutput() {
        previewCanvas = new CanvasFrame("攝像頭預覽", CanvasFrame.getDefaultGamma() / grabber.getGamma());
        previewCanvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        previewCanvas.setAlwaysOnTop(true);
    }
  • 接下來是output方法,定義了拿到每一幀視訊資料後做什麼事情,這裡是在本地視窗顯示:
@Override
    protected void output(Frame frame) {
        // 預覽視窗上顯示當前幀
        previewCanvas.showImage(frame);
    }
  • 最後是處理視訊的迴圈結束後,程式退出前要做的事情,即關閉本地視窗:
@Override
    protected void releaseOutputResource() {
        if (null!= previewCanvas) {
            previewCanvas.dispose();
        }
    }
  • 至此,用本地視窗預覽攝像頭的功能已開發完成,再寫上main方法,注意引數1000表示預覽持續時間是1000秒:
public static void main(String[] args) {
        new PreviewCamera().action(1000);
    }
  • 執行main方法,如下圖,攝像頭順利工作,左上角的時間水印也能正常顯示(可見今天深圳的天氣不錯,應該出去走走,而不是在家寫部落格...):

在這裡插入圖片描述

  • 至此,我們們已完成了本地視窗預覽功能,得益於JavaCV的強大,整個過程是如此的輕鬆愉快,接下來請繼續關注欣宸原創,《JavaCV的攝像頭實戰》系列還會呈現更多豐富的應用;

原始碼下載

名稱 連結 備註
專案主頁 https://github.com/zq2599/blog_demos 該專案在GitHub上的主頁
git倉庫地址(https) https://github.com/zq2599/blog_demos.git 該專案原始碼的倉庫地址,https協議
git倉庫地址(ssh) git@github.com:zq2599/blog_demos.git 該專案原始碼的倉庫地址,ssh協議
  • 這個git專案中有多個資料夾,本篇的原始碼在javacv-tutorials資料夾下,如下圖紅框所示:

在這裡插入圖片描述

  • javacv-tutorials裡面有多個子工程,《JavaCV的攝像頭實戰》系列的程式碼在simple-grab-push工程下:

在這裡插入圖片描述

你不孤單,欣宸原創一路相伴

https://github.com/zq2599/blog_demos

相關文章