javacv开发详解之1:调用本机摄像头视频

Wesley13
• 阅读 675

前言:javacv开发包是用于支持java多媒体开发的一套开发包,可以适用于本地多媒体(音视频)调用以及音视频,图片等文件后期操作(图片修改,音视频解码剪辑等等功能),这里只使用最简单的本地摄像头调用来演示一下javacv的基础功能
重要:

建议使用最新javaCV1.3版本,该版本已解决更早版本中已发现的大部分bug

javacv系列文章使用6个jar包:

javacv.jar,javacpp.jar,ffmpeg.jar,ffmpeg-系统平台.jar,opencv.jar,opencv-系统平台.jar。

其中ffmpeg-系统平台.jar,opencv-系统平台.jar中的系统平台根据开发环境或者测试部署环境自行更改为对应的jar包,比如windows7 64位系统替换为ffmpeg-x86-x64.jar

为什么要这样做:因为ffmpeg-系统平台.jar中存放的是c/c++本地so/dll库,而ffmpeg.jar就是使用javacpp封装的对应本地库java接口的实现,而javacpp就是基于jni的一个功能性封装包,方便实现jni,javacv.jar就是对9个视觉库进行了二次封装,但是实现的功能有限,所以建议新手先熟悉openCV和ffmpeg这两个C/C++库的API后再来看javaCV思路就会很清晰了。

须知:

javacv系列文章默认音视频处理使用ffmpeg,图像处理使用opencv,摄像头抓取使用opencv

javacv官方github维护地址:https://github.com/bytedeco/javacv
1、使用最新的javacv1.4.4
(注意:从其他地方下载的依赖包请积极开心的替换为官方jar包和博主提供jar包;如果使用其他jar包版本而导致出错,不要急着找博主问为啥会报错,先把jar包替换了再试试看)
(1)使用maven添加依赖

     
        org.bytedeco
        javacv-platform
        1.4.4
     

 
(2)使用gradle添加依赖

    dependencies {
        compile group: 'org.bytedeco', name: 'javacv-platform', version: '1.4.4'
      }

 
(3)使用本地jar包方式

最新版实在太大,需要下载全量包的请到官方github.com/bytedeco/javacv下载

javaCV1.3.3版本下载(全量包,文件名:javacv-platform-1.3.3-bin.zip,大小:212M):http://download.csdn.net/download/eguid\_1/10146035

javaCV1.3版本下载:

1、javacv1.3核心包:http://download.csdn.net/detail/eguid\_1/9716960(包含javacv.jar,javacpp.jar和javacv-platform.jar)

2、javacv1.3-opencv包集合:http://download.csdn.net/detail/eguid\_1/9716965

3、javacv1.3-ffmpeg包集合:http://download.csdn.net/detail/eguid\_1/9719323

javaCV1.3所有jar包集合:http://download.csdn.net/detail/eguid\_1/9719343

javaCV1.2所有jar包集合在这里下载:http://download.csdn.net/album/detail/3171

 

以下部分为javacv1.2版本,不再建议下载

基础依赖包:javacv.jar;javacpp.jar(必须是1.2以上版本)

 

jar包使用须知:

windows x64平台用到的opencv依赖:opencv.jar;oepncv-windows-x86_64.jar(其他平台替换为对应的jar包即可)。

补充:

1、如果是苹果mac系统,把oepncv-windows-x86_64.jar替换成这个包opencv-macosx-x86_64.jar
2、linux平台替换成这个包:opencv-linux-x86_64.jar  

3、安卓平台替换成opencv-android-arm.jar  或者opencv-android-x86.jar

maven和gradle方式如果想要减小依赖包大小,则需要手动进行排除不需要的平台依赖即可

 
2、为什么不需要安装opencv?

从javacv0.8开始,已经不需要本地安装opencv,直接通过引用opencv对应的系统平台的引用包即可。

(比如oepncv-windows-x86_64.jar就是典型的64位windows环境依赖包)

 
3、java通过javacv获取windows的摄像头视频

最终调用的摄像头实时视频图像界面:

预览本机摄像头视频图像的简单实现:

 

    /**
     * 文件名:javavcCameraTest.java
     * 描述:调用windows平台的摄像头窗口视频
     * 修改时间:2016年6月13日
     * 修改内容:
     */
    package cc.eguid.javacv;
     
    import javax.swing.JFrame;
     
    import org.bytedeco.javacv.CanvasFrame;
    import org.bytedeco.javacv.OpenCVFrameConverter;
    import org.bytedeco.javacv.FrameGrabber.Exception;
    import org.bytedeco.javacv.OpenCVFrameGrabber;
     
    /**
     * 调用本地摄像头窗口视频
     * @author eguid  
     * @version 2016年6月13日  
     * @see javavcCameraTest  
     * @since  javacv1.2
     */
     
    public class JavavcCameraTest
    {
    public static void main(String[] args) throws Exception, InterruptedException
    {
        OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);  
        grabber.start();   //开始获取摄像头数据
        CanvasFrame canvas = new CanvasFrame("摄像头");//新建一个窗口
        canvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        canvas.setAlwaysOnTop(true);
        
        while(true)
        {
            if(!canvas.isDisplayable())
            {//窗口是否关闭
                grabber.stop();//停止抓取
                System.exit(2);//退出
            }
            canvas.showImage(grabber.grab());//获取摄像头图像并放到窗口上显示, 这里的Frame frame=grabber.grab(); frame是一帧视频图像
     
            Thread.sleep(50);//50毫秒刷新一次图像
        }
    }
    }

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
javacv中byte[]、BufferImage、Mat的互转
最近在研究使用opencv对普通图片进行扣章的功能,在python上实现了,然后想使用在java上,java在选择jar包时选择了javacv(当然还有更原生的opencv,但由于考虑到后面可能会用到ffmpeg所以还是使用javacv)到javacv的官网(http://bytedeco.org(https://www.oschina.net/a
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
Java日期时间API系列31
  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这