乐趣区

关于云计算:JavaCV的摄像头实战之四抓图

欢送拜访我的 GitHub

这里分类和汇总了欣宸的全副原创(含配套源码):https://github.com/zq2599/blog_demos

本篇概览

  • 本文是《JavaCV 的摄像头实战》的第四篇,也是整个系列最简略轻松的一篇,寥寥几行代码实现从摄像头抓图的性能;

    编码

  • 《JavaCV 的摄像头实战之一:根底》一文创立的 <font color=”red”>simple-grab-push</font> 工程中已写好父类 <font color=”blue”>AbstractCameraApplication</font>,本篇持续应用该工程,创立子类实现那些形象办法即可
  • 编码前先回顾父类的根底构造,如下图,粗体是父类定义的各个办法,红色块都是须要子类来实现形象办法,所以接下来,咱们以本地窗口预览为指标实现这三个红色办法即可:

  • 尽管父类要求子类必须实现这三个办法:initOutput、output、releaseOutputResource,然而实际上只有 <font color=”blue”>output</font> 办法中有代码,其余两个是空办法;
  • 新建文件 <font color=”blue”>GrabImageFromCamera.java</font>,这是 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 办法,留神参数 <font color=”blue”>10</font> 示意继续执行 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 的摄像头实战》系列还会出现更多丰盛的利用;

源码下载

  • 《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> 工程下:

你不孤独,欣宸原创一路相伴

https://github.com/zq2599/blog_demos

退出移动版