歡迎訪問我的GitHub
https://github.com/zq2599/blog_demos
內(nèi)容:所有原創(chuàng)文章分類匯總及配套源碼,涉及Java、Docker、Kubernetes、DevOPS等;
本篇概覽
- 前文《JavaCV的攝像頭實(shí)戰(zhàn)之一:基礎(chǔ)》已經(jīng)為整個(gè)系列做好了鋪墊,接下來的文章會專注于如何使用來自攝像頭的數(shù)據(jù),本篇先從最簡單的開始:本地窗口預(yù)覽
編碼
前文創(chuàng)建的<font color="red">simple-grab-push</font>工程中已經(jīng)準(zhǔn)備好了父類<font color="blue">AbstractCameraApplication</font>,所以本篇繼續(xù)使用該工程,創(chuàng)建子類實(shí)現(xiàn)那些抽象方法即可
編碼前先回顧父類的基礎(chǔ)結(jié)構(gòu),如下圖,粗體是父類定義的各個(gè)方法,紅色塊都是需要子類來實(shí)現(xiàn)抽象方法,所以接下來,咱們以本地窗口預(yù)覽為目標(biāo)實(shí)現(xiàn)這三個(gè)紅色方法即可:

在這里插入圖片描述
新建文件<font color="blue">PreviewCamera.java</font>,這是AbstractCameraApplication的子類,其代碼很簡單,接下來按上圖順序依次說明
先定義CanvasFrame類型的成員變量previewCanvas,這是展示視頻幀的本地窗口:
protected CanvasFrame previewCanvas
- 然后是初始化操作,可見是previewCanvas的實(shí)例化和參數(shù)設(shè)置:
@Override
protected void initOutput() {
previewCanvas = new CanvasFrame("攝像頭預(yù)覽", CanvasFrame.getDefaultGamma() / grabber.getGamma());
previewCanvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
previewCanvas.setAlwaysOnTop(true);
}
- 接下來是output方法,定義了拿到每一幀視頻數(shù)據(jù)后做什么事情,這里是在本地窗口顯示:
@Override
protected void output(Frame frame) {
// 預(yù)覽窗口上顯示當(dāng)前幀
previewCanvas.showImage(frame);
}
- 最后是處理視頻的循環(huán)結(jié)束后,程序退出前要做的事情,即關(guān)閉本地窗口:
@Override
protected void releaseOutputResource() {
if (null!= previewCanvas) {
previewCanvas.dispose();
}
}
- 至此,用本地窗口預(yù)覽攝像頭的功能已開發(fā)完成,再寫上main方法,注意參數(shù)<font color="red">1000</font>表示預(yù)覽持續(xù)時(shí)間是1000秒:
public static void main(String[] args) {
new PreviewCamera().action(1000);
}
- 運(yùn)行main方法,如下圖,攝像頭順利工作,左上角的時(shí)間水印也能正常顯示(可見今天深圳的天氣不錯(cuò),應(yīng)該出去走走,而不是在家寫博客...):

在這里插入圖片描述
- 至此,咱們已完成了本地窗口預(yù)覽功能,得益于JavaCV的強(qiáng)大,整個(gè)過程是如此的輕松愉快,接下來請繼續(xù)關(guān)注欣宸原創(chuàng),《JavaCV的攝像頭實(shí)戰(zhàn)》系列還會呈現(xiàn)更多豐富的應(yīng)用;
源碼下載
- 《JavaCV的攝像頭實(shí)戰(zhàn)》的完整源碼可在GitHub下載到,地址和鏈接信息如下表所示(https://github.com/zq2599/blog_demos):
| 名稱 | 鏈接 | 備注 |
|---|---|---|
| 項(xiàng)目主頁 | https://github.com/zq2599/blog_demos | 該項(xiàng)目在GitHub上的主頁 |
| git倉庫地址(https) | https://github.com/zq2599/blog_demos.git | 該項(xiàng)目源碼的倉庫地址,https協(xié)議 |
| git倉庫地址(ssh) | git@github.com:zq2599/blog_demos.git | 該項(xiàng)目源碼的倉庫地址,ssh協(xié)議 |
- 這個(gè)git項(xiàng)目中有多個(gè)文件夾,本篇的源碼在<font color="blue">javacv-tutorials</font>文件夾下,如下圖紅框所示:

在這里插入圖片描述
- <font color="blue">javacv-tutorials</font>里面有多個(gè)子工程,《JavaCV的攝像頭實(shí)戰(zhàn)》系列的代碼在<font color="red">simple-grab-push</font>工程下:

在這里插入圖片描述