java捕捉摄像头画面_javacv开发指南之1:调用本机摄像头实时图像视频

本文介绍了如何使用JavaCV开发包来调用本地摄像头,实现实时图像视频的捕捉。通过添加javacv-platform的依赖,展示了简单的Java代码来创建一个窗口显示摄像头画面,并解释了相关依赖和版本选择的注意事项。
摘要由CSDN通过智能技术生成

前言

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

须知

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

1、使用最新的javacv版本

从其他地方下载的依赖包请积极开心的替换为官方jar包和博主提供jar包;如果使用其他jar包版本而导致出错,不要急着找博主问为啥会报错,先把jar包替换了再试试看,建议使用最新javaCV版本,新版本已解决更早版本中已发现的大部分bug。

(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下载。

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思路就会很清晰了。

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

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

从javacv0.8开始,已经不需要本地安装opencv,直接通过引用opencv对应的系统平台的引用包即可。(比如oepncv-windows-x86_64.jar就是典型的64位windows环境依赖包)

3、编写预览本机摄像头视频图像的简单代码

/**

* 文件名: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毫秒刷新一次图像

}

}

}

4、运行代码结果

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

代码运行界面

是不是很简单,原本很复杂的流媒体操作,javaCV能够帮助我们快速实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值