JavaCV入门使用

JavaCV入门

0、背景

​ 最近在机器人项目的工作中遇到一个需求,需要将机器人摄像头获取到的画面通过WebSocket的方式实时推送给浏览器。这里获取摄像头画面使用JavaCV,在决定使用javaCV之前还考虑过OpenCV。

​ OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库。OpenCV是由英特尔公司发起并参与开发,以BSD许可证授权发行,可以在商业和研究领域中免费使用。OpenCV可用于开发实时的图像处理、计算机视觉以及模式识别程序。该程序库也可以使用英特尔公司的IPP进行加速处理。

​ JavaCV可以认为是OpenCV的Java版,其本质上是一个Java Interface,是一个联结Java与OpenCV的桥梁,所以它本质上是依赖OpenCV的。

1、简介

以下文字为GitHub项目介绍:

JavaCV使用来自计算机视觉领域研究人员常用库(OpenCV, FFmpeg, libdc1394, FlyCapture, Spinnaker, OpenKinect, librealsense, CL PS3 Eye Driver, videoInput, ARToolKitPlus, flandmark, Leptonica,和Tesseract)的包装器,并提供实用程序类,使其功能更容易在Java、Android平台上使用。

总结:JavaCV是对各种常用计算机视觉库的封装后的一组jar包,其中封装了FFmpeg、OpenCV等计算机视觉编程人员常用库的接口,可以通过其中的Utility类方便的在包括Android在内的Java平台上调用这些接口。

2、Jar包引入

maven在pom.xml中引入

 
    org.bytedeco
    javacv-platform
    1.5.7
  

注意:这里需要的jar包特别大需要大概300M,测试使用是没影响的,如果需投入线上则需要拆分出需要的部分。

3、获取摄像头图片

由于在推送图片时我使用的是base64的格式所以这段代码最后输出为Base64图片。

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);//新建opencv抓取器,一般的电脑和移动端设备中摄像头默认序号是0,不排除其他情况
try{
	grabber.start();//开始获取摄像头数据
    Frame image  = grabber.grab();
    //Java2DFrameConverter可以对Frame进行相互转换操作
    BufferedImage bi = new ava2DFrameConverter().getBufferedImage(image);
    ImageIO.write(bi, "jpg", outputStream);
    BASE64Encoder encoder = new BASE64Encoder();
    String base64Img = "data:image/jpg;base64," + encoder.encode(outputStream.toByteArray());
    System.out.println(base64Img);
}catch (Exception e){
    e.printStackTrace();
}

4、结束

获取到图片之后就可做对应的处理了,这里我是使用WebSocket推送给浏览器达到显示效果。下一篇准备写一下关于WebSocket的内容,有兴趣的朋友们欢迎交流。

你可能感兴趣的:(机器人项目,websocket,opencv)