Rate this post

背景介绍

作为一门强大的语言,Java所展现给编程人员的不仅仅是来自于发上的便利,更是这题开发过程中的的可扩展性。通过添加jar包即可扩展和使用开源的架构和方法。这是Java给程序员带来的最直观的体验。但是请不要忘记Java也是多平台支持的一门语言,Java可以在很多硬件平台上运行,只要部署了JVM,一个单片机都可以运行Java代码;因为涉及到了操控跟多的除计算机以外的硬件,这给开发人员带来更多施展才能的空间。本文来讲一讲Java是如何获取摄像头信息并且进行传输的。

摄像头的应用

对于一台电脑来说,即成的摄像头硬件现在已经是标配了。我记得在过去,电脑的摄像头都是独立的,需要单独购买并且安装。安装也不是说将线插上就能用了。对于一个操作系统来说,一个未知的硬件拿到手里(链接上去)是不知道怎么使用的。所以还需要驱动程序,才能将摄像头编程一个标准输入设备。到那时现在来看,就不说电脑了,人人用的手机都是带摄像头的。但是在我们编程人员眼里,如何才能获取到摄像头输入的信息呢?其实也不难,当然图像信号是一帧一帧的组成的,每一帧都是一个图片。每一个图片又是由很多像素组成的,每个像素也可以是由RGB三个参数组成的单种颜色的一个单位。初学者会遐想,这个过程不会是要从像素点开始抓吧?通过算法将像素点组成一个图片呈现出来,然后再把图片组成播放流一张一张放出来。是的从根本意义上讲是这么一个过程成,但是抓取像素并组成图片是由集成的硬件系统完成的,获取图片成品和组成流来播放是程序完成的。

下面我们来看看需要哪些工具:

jar包:javacv,opencv,ffmpeg(声音信号获取)

具体实现:

openCVFrameGrabber FGrabber = new openCVFrameGrabber(0);

生成一个图片抓取工具,这个会通过JVM把当前设备摄像头的信息调取过来。

当然还需要把得到的图像展示出来,这就需要一个画布:

CanvasFrame CFrame = new CanvasFrame(“画布名称”);

然后我们只需要配合一个循环体就可以将获得的图像粘贴到画布上展现出来了。

循环体如下:

while(true){
CFrame.showImage(FGrabber.grab());//这句就是抓取并展示的意思
Thread.sleep(1000/60);//1000是1000毫秒,除以60并让线程暂停这么长
//时间是为了限定帧率为60fps
}