歡迎訪問我的GitHub
https://github.com/zq2599/blog_demos
內容:所有原創文章分類彙總及配套原始碼,涉及Java、Docker、Kubernetes、DevOPS等;
本篇概覽
- 前文《JavaCV的攝像頭實戰之一:基礎》已經為整個系列做好了鋪墊,接下來的文章會專注於如何使用來自攝像頭的資料,本篇先從最簡單的開始:本地視窗預覽
編碼
- 前文建立的<font color="red">simple-grab-push</font>工程中已經準備好了父類<font color="blue">AbstractCameraApplication</font>,所以本篇繼續使用該工程,建立子類實現那些抽象方法即可
- 編碼前先回顧父類的基礎結構,如下圖,粗體是父類定義的各個方法,紅色塊都是需要子類來實現抽象方法,所以接下來,我們們以本地視窗預覽為目標實現這三個紅色方法即可:
- 新建檔案<font color="blue">PreviewCamera.java</font>,這是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方法,注意引數<font color="red">1000</font>表示預覽持續時間是1000秒:
public static void main(String[] args) {
new PreviewCamera().action(1000);
}
- 執行main方法,如下圖,攝像頭順利工作,左上角的時間水印也能正常顯示(可見今天深圳的天氣不錯,應該出去走走,而不是在家寫部落格...):
- 至此,我們們已完成了本地視窗預覽功能,得益於JavaCV的強大,整個過程是如此的輕鬆愉快,接下來請繼續關注欣宸原創,《JavaCV的攝像頭實戰》系列還會呈現更多豐富的應用;
原始碼下載
- 《JavaCV的攝像頭實戰》的完整原始碼可在GitHub下載到,地址和連結資訊如下表所示(https://github.com/zq2599/blo...):
名稱 | 連結 | 備註 |
---|---|---|
專案主頁 | https://github.com/zq2599/blo... | 該專案在GitHub上的主頁 |
git倉庫地址(https) | https://github.com/zq2599/blo... | 該專案原始碼的倉庫地址,https協議 |
git倉庫地址(ssh) | git@github.com:zq2599/blog_demos.git | 該專案原始碼的倉庫地址,ssh協議 |
- 這個git專案中有多個資料夾,本篇的原始碼在<font color="blue">javacv-tutorials</font>資料夾下,如下圖紅框所示:
- <font color="blue">javacv-tutorials</font>裡面有多個子工程,《JavaCV的攝像頭實戰》系列的程式碼在<font color="red">simple-grab-push</font>工程下: