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

欢迎访问我的GitHub

https://github.com/zq2599/blog_demos

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

本篇概览

编码

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

JavaCV的摄像头实战之二:本地窗口预览
  • 新建文件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的摄像头实战》系列还会呈现更多丰富的应用;

源码下载

名称 链接 备注 项目主页
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的摄像头实战之二:本地窗口预览
  • javacv-tutorials里面有多个子工程,《JavaCV的摄像头实战》系列的代码在 simple-grab-push工程下:

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

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

https://github.com/zq2599/blog_demos

Original: https://www.cnblogs.com/bolingcavalry/p/15838131.html
Author: 程序员欣宸
Title: JavaCV的摄像头实战之二:本地窗口预览

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/588830/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 描述性统计

    Part2 描述性统计 一、直方图 直方图是用面积而不是用高度来表示数,所以其不同于条形图 左边的刻度表示该块 每单位所占总面积的百分比,可以称其为 密度尺度。例如以每50元为一个…

    Java 2023年6月7日
    080
  • Spring Boot:集成Druid数据源

    综合概述 数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数…

    Java 2023年5月30日
    079
  • MyBatis

    == 1、#{}和${}的区别:== (1) #{}是参数占位符,MyBatis会将SQL中的#{}替换为 ?, 实际参数值替换 在SQL运行前会使用 PreparedStatem…

    Java 2023年6月5日
    054
  • 线程安全策略

    保证线程安全的策略大体可以分为以下几个: 不可变对象:对象只能读,不能修改,从根源上消除多线程的不安全性。 线程封闭:线程之间不共享变量。 同步容器:使用同步关键字修饰关键方法,保…

    Java 2023年6月8日
    069
  • Rust特征与泛型区别点

    1. Rust的特征与泛型 use std::boxed::Box; // 定义一个特征 pub trait Animal{ fn bark(&self); } pub s…

    Java 2023年6月15日
    079
  • 从java toBinaryString() 看计算机数值存储方式(原码、反码、补码)

    1.1 方法说明 该方法位于 java.lang.Integer类中方法签名: public static String toBinaryString(int i)含义:返回参数数…

    Java 2023年6月6日
    084
  • mysql 常用函数

    CONCAT(s1,s2) 例子:SELECT CONCAT (“SQL “,”Runoob “,”Gooogle &#…

    Java 2023年6月5日
    053
  • docker 安装mysql5.7

    docker 安装mysql5.7 前言 MySQL 是目前最流行的关系型数据库管理系统,开发者是瑞典MySQL AB公司。目前MySQL被广泛地应用在Internet上的中小型网…

    Java 2023年6月15日
    071
  • springboot 整合druid–Java 注解+代码配置 Bean

    1.pom.xml引入 2.druid配置类: 3.构建DataSource对象 4.配置监控拦截器 5.配置Druid监控视图 6.去除druid监控页面广告 7.启动类加@Se…

    Java 2023年6月6日
    090
  • Kafka

    1. Kafka简介 1.1 消息队列 1.1.1 消息队列简介 消息Message:通讯设备之间传递的数据 队列Queue:一种特殊的线性表(数据元素首尾相连),特殊之处在于只允…

    Java 2023年6月8日
    090
  • springboot操作es

    转载:https://blog.csdn.net/qq_40018541/article/details/124839238?utm_medium=distribute.pc_re…

    Java 2023年5月30日
    074
  • LeetCode剑指Offer刷题总结(三)

    合并两个排序链表25 本题思路非常简单,两个链表元素依次比较,压入新链表即可,但有易错点。 public ListNode mergeTwoLists(ListNode l1, L…

    Java 2023年6月7日
    076
  • 扩展、接管MVC都不会,还会用Spring Boot?

    持续原创输出,点击上方蓝字关注我 目录 前言 Spring Boot 版本 如何扩展MVC? 如何自定义一个拦截器? 什么都不配置为什么依然能运行MVC相关的功能? 如何全面接管M…

    Java 2023年6月14日
    064
  • SpringCloud-Eureka

    1. Eureka简介 Eureka是在Java语言上,基于Restful Api开发的服务注册与发现组件,Springcloud Netflix中的重要组件。 注册中心可以说是微…

    Java 2023年6月7日
    094
  • main 方法可以继承吗?

    阿里二面:main 方法可以继承吗? 昨天,微信群里一位网友,在群里发了自己面试阿里的过程。其中一个面试,他在群里 PUA 其他网友。这道面试题就是: Java &#x4E…

    Java 2023年6月7日
    089
  • 好物合集(2)

    Utools(超好用的插件软件) 是什么 uTools 是一个极简、插件化的现代桌面软件,通过自由选配丰富的插件,打造得心应手的工具集合。 通过快捷键(默认 alt + space…

    Java 2023年6月5日
    070
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球