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

Posted 程序员欣宸

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaCV的摄像头实战之二:本地窗口预览相关的知识,希望对你有一定的参考价值。

欢迎访问我的GitHub

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

本篇概览

编码

  • 前文创建的simple-grab-push工程中已经准备好了父类AbstractCameraApplication,所以本篇继续使用该工程,创建子类实现那些抽象方法即可
  • 编码前先回顾父类的基础结构,如下图,粗体是父类定义的各个方法,红色块都是需要子类来实现抽象方法,所以接下来,咱们以本地窗口预览为目标实现这三个红色方法即可:
  • 新建文件PreviewCamera.java,这是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方法,注意参数1000表示预览持续时间是1000秒:
public static void main(String[] args) 
        new PreviewCamera().action(1000);
    
  • 运行main方法,如下图,摄像头顺利工作,左上角的时间水印也能正常显示(可见今天深圳的天气不错,应该出去走走,而不是在家写博客…):
  • 至此,咱们已完成了本地窗口预览功能,得益于JavaCV的强大,整个过程是如此的轻松愉快,接下来请继续关注欣宸原创,《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的摄像头实战之二:本地窗口预览的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

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

JavaCV人脸识别三部曲之三:识别和预览

JavaCV人脸识别三部曲之三:识别和预览