欢迎访问我的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都是空方法:
   @Overrideprotected void initOutput() throws Exception {// 啥也不用做}@Overrideprotected void releaseOutputResource() {// 啥也不用做}
  • 接下来是output方法,这里面用帧对象生成图片:
 @Overrideprotected 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一秒钟:
    @Overrideprotected 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 callbackProcess finished with exit code 0
  • 打开图片文件所在目录,如下图,图片已经成功生成:
  • 看其中一张的详情也符合预期:
  • 至此,咱们抓图功能完成,接下来请继续关注欣宸原创,《JavaCV的摄像头实战》系列还会呈现更多丰富的应用;

源码下载

  • 《JavaCV的摄像头实战》的完整源码可在GitHub下载到,地址和链接信息如下表所示(https://github.com/zq2599/blog_demos):
名称 链接 备注
项目主页 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工程下:

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

  1. Java系列
  2. Spring系列
  3. Docker系列
  4. kubernetes系列
  5. 数据库+中间件系列
  6. DevOps系列

JavaCV的摄像头实战之四:抓图相关推荐

  1. JavaCV的摄像头实战之十二:性别检测

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是<JavaCV的摄像头实战> ...

  2. JavaCV的摄像头实战之八:人脸检测

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是<JavaCV的摄像头实战> ...

  3. JavaCV的摄像头实战之二:本地窗口预览

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 前文<JavaCV的摄像头实战之一:基 ...

  4. JavaCV的摄像头实战之十四:口罩检测

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是<JavaCV的摄像头实战> ...

  5. JavaCV的摄像头实战之十三:年龄检测

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是<JavaCV的摄像头实战> ...

  6. JavaCV的摄像头实战之三:保存为mp4文件

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是<JavaCV的摄像头实战> ...

  7. 《JavaCV音视频实战宝典》专栏介绍和目录

    <JavaCV音视频实战宝典>是2022年最新推出专注于音视频开发的高级实战宝典教程系列,更加偏重综合类流媒体音视频应用,技术不在局限于JavaCV,可能会包含结合Java中较为经典的sp ...

  8. 大华摄像头:视频抓图接口

    大华摄像头:视频抓图接口 CLIENT_CapturePictureEx 保存图片,对显示图像进行瞬间抓图 CLIENT_SetSnapRevCallBack 设置抓图回调函数 CLIENT_Snap ...

  9. [原创][从mambo到joomla的迁移实战之四]插件、组件的迁移

    摘要: 本文记录了网站由mambo迁移到joomla的过程中插件.组件的迁移 作者:陈海青(josonchen)  (http://www.chq.name)  (http://www.hhrz.or ...

最新文章

  1. Linux之Debian下安装LAMP apt-get安装方式
  2. 08函数的参数 进阶
  3. why in GM0 our extension component this.sPath is not correct
  4. struct and union
  5. SQL Server as(给查询结果指定列名)
  6. DedeCMS自定义表单制作和调用办法
  7. python字符串函数_python字符串函数
  8. 如何避免数据治理过程的误区
  9. iOS 处理后台返回的json(或NSDictionary)形式字符串
  10. ar面部识别_AR人脸识别数据集
  11. 动态规划法(入门)——最大正方形、最大长方形
  12. 常见的游戏有哪些分类?
  13. Ubuntu开启SSH服务以及使用Putty远程控制的解决办法
  14. 【转】腾讯2017校招实习生面试总结 腾讯实习生面试经验 (已拿offer)
  15. 爬完点评爬某东,爬他个600多本书籍资料
  16. linux的ping命令含义,Linux ping命令详解
  17. 受力分析软件_学了那么多力学,怎么还是不会做有限元分析?
  18. 雨刮器全国产化电子元件推荐方案
  19. C++线程编程-设计无锁的并发数据结构
  20. PKI与证书相关基本知识

热门文章

  1. php反射类 ReflectionClass
  2. Dodo:轻量地可定制顶部信息栏
  3. cookie.getMaxAge()的-1是什么意思
  4. 助理执业医师(中药)考试系统_金桥考试虫 v2.0 官方
  5. 渗透测试之局域网断网攻击
  6. 查看mysql某个数据库多少张表以及占用的空间
  7. 徐小明20120201
  8. 大数据与区块链相关好文章整理
  9. 60-10-030-命令-kafka-consumer-groups.sh
  10. 忘记密码 密码保护SqlServer备份文件恢复方法