JavaCV的攝像頭實戰之四:抓圖


歡迎訪問我的GitHub

這里分類和匯總了欣宸的全部原創(含配套源碼):https://github.com/zq2599/blog_demos

本篇概覽

  • 本文是《JavaCV的攝像頭實戰》的第四篇,也是整個系列最簡單輕松的一篇,寥寥幾行代碼實現從攝像頭抓圖的功能;

編碼

  • 《JavaCV的攝像頭實戰之一:基礎》一文創建的simple-grab-push工程中已寫好父類AbstractCameraApplication,本篇繼續使用該工程,創建子類實現那些抽象方法即可
  • 編碼前先回顧父類的基礎結構,如下圖,粗體是父類定義的各個方法,紅色塊都是需要子類來實現抽象方法,所以接下來,咱們以本地窗口預覽為目標實現這三個紅色方法即可:

在這里插入圖片描述

  • 雖然父類要求子類必須實現這三個方法:initOutput、output、releaseOutputResource,但是實際上只有output方法中有代碼,其他兩個是空方法;

  • 新建文件GrabImageFromCamera.java,這是AbstractCameraApplication的子類,其代碼很簡單,接下來按上圖順序依次說明

  • 定義三個成員變量,作用分別是:指定圖片文件存放路徑(請自行調整)、圖片格式、當前進程已存儲圖片數量:

	// 圖片存儲路徑的前綴(請根據自己電腦情況調整)
    protected String IMAGE_PATH_PREFIX = "E:\\temp\\202111\\28\\camera-"
            + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())
            + "-";

    // 圖片格式
    private final static String IMG_TYPE = "jpg";

    /**
     * 當前進程已經存儲的圖片數量
     */
    private int saveNums = 0;
  • 初始化的時候啥也不用做,對應的結束前的也沒有資源需要釋放,所以initOutput和releaseOutputResource都是空方法:
   @Override
    protected void initOutput() throws Exception {
        // 啥也不用做
    }
    
	@Override
    protected void releaseOutputResource() {
        // 啥也不用做
    }
  • 接下來是output方法,這里面用幀對象生成圖片:
	@Override
    protected void output(Frame frame) throws Exception {
        // 圖片的保存位置
        String imagePath = IMAGE_PATH_PREFIX + (saveNums++) + "." + IMG_TYPE;

        // 把幀對象轉為Image對象
        BufferedImage bufferedImage = converter.getBufferedImage(frame);

        // 保存圖片
        ImageIO.write(bufferedImage, IMG_TYPE, new FileOutputStream(imagePath));

        log.info("保存完成:{}", imagePath);
    }
  • 最后重寫getInterval方法,表示每存一張圖片就sleep一秒鍾:
    @Override
    protected int getInterval() {
        // 表示保存一張圖片后會sleep一秒鍾
        return 1000;
    }
  • 至此,抓圖功能已開發完成,再寫上main方法,注意參數10表示持續執行10秒鍾:
    public static void main(String[] args) {
        // 連續十秒執行抓圖操作
        new GrabImageFromCamera().action(10);
    }
  • 運行main方法,控制台輸出如下:
...
08:57:42.393 [main] INFO com.bolingcavalry.grabpush.camera.AbstractCameraApplication - 初始化完成,耗時[8515]毫秒,幀率[30.0],圖像寬度[1280],圖像高度[720]
08:57:43.110 [main] INFO com.bolingcavalry.grabpush.camera.GrabImageFromCamera - 保存完成:E:\temp\202111\28\camera-20211130085733-0.jpg
08:57:44.155 [main] INFO com.bolingcavalry.grabpush.camera.GrabImageFromCamera - 保存完成:E:\temp\202111\28\camera-20211130085733-1.jpg
08:57:45.193 [main] INFO com.bolingcavalry.grabpush.camera.GrabImageFromCamera - 保存完成:E:\temp\202111\28\camera-20211130085733-2.jpg
08:57:46.243 [main] INFO com.bolingcavalry.grabpush.camera.GrabImageFromCamera - 保存完成:E:\temp\202111\28\camera-20211130085733-3.jpg
08:57:47.287 [main] INFO com.bolingcavalry.grabpush.camera.GrabImageFromCamera - 保存完成:E:\temp\202111\28\camera-20211130085733-4.jpg
08:57:48.348 [main] INFO com.bolingcavalry.grabpush.camera.GrabImageFromCamera - 保存完成:E:\temp\202111\28\camera-20211130085733-5.jpg
08:57:49.430 [main] INFO com.bolingcavalry.grabpush.camera.GrabImageFromCamera - 保存完成:E:\temp\202111\28\camera-20211130085733-6.jpg
08:57:50.479 [main] INFO com.bolingcavalry.grabpush.camera.GrabImageFromCamera - 保存完成:E:\temp\202111\28\camera-20211130085733-7.jpg
08:57:51.547 [main] INFO com.bolingcavalry.grabpush.camera.GrabImageFromCamera - 保存完成:E:\temp\202111\28\camera-20211130085733-8.jpg
08:57:52.551 [main] INFO com.bolingcavalry.grabpush.camera.AbstractCameraApplication - 輸出結束
[ WARN:0] global D:\a\javacpp-presets\javacpp-presets\opencv\cppbuild\windows-x86_64\opencv-4.5.3\modules\videoio\src\cap_msmf.cpp (438) `anonymous-namespace'::SourceReaderCB::~SourceReaderCB terminating async callback

Process finished with exit code 0
  • 打開圖片文件所在目錄,如下圖,圖片已經成功生成:

在這里插入圖片描述

  • 看其中一張的詳情也符合預期:

在這里插入圖片描述

  • 至此,咱們抓圖功能完成,接下來請繼續關注欣宸原創,《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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM