0

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

 2 years ago
source link: https://segmentfault.com/a/1190000041329656
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

欢迎访问我的GitHub

https://github.com/zq2599/blog_demos

内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;

  • 前文创建的<font color="red">simple-grab-push</font>工程中已经准备好了父类<font color="blue">AbstractCameraApplication</font>,所以本篇继续使用该工程,创建子类实现那些抽象方法即可
  • 编码前先回顾父类的基础结构,如下图,粗体是父类定义的各个方法,红色块都是需要子类来实现抽象方法,所以接下来,咱们以本地窗口预览为目标实现这三个红色方法即可:

在这里插入图片描述

  • 新建文件<font color="blue">PreviewCamera.java</font>,这是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方法,注意参数<font color="red">1000</font>表示预览持续时间是1000秒:
public static void main(String[] args) {
        new PreviewCamera().action(1000);
    }
  • 运行main方法,如下图,摄像头顺利工作,左上角的时间水印也能正常显示(可见今天深圳的天气不错,应该出去走走,而不是在家写博客...):

在这里插入图片描述

  • 至此,咱们已完成了本地窗口预览功能,得益于JavaCV的强大,整个过程是如此的轻松愉快,接下来请继续关注欣宸原创,《JavaCV的摄像头实战》系列还会呈现更多丰富的应用;
名称链接备注项目主页https://github.com/zq2599/blo...该项目在GitHub上的主页git仓库地址(https)https://github.com/zq2599/blo...该项目源码的仓库地址,https协议git仓库地址(ssh)[email protected]: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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK