以服务于中国广大创业者为己任,立志于做最好的创业网站。

标签云创业博客联系我们

导航菜单

网络cv是什么意思,计算机专业cv是什么意思

JavaCV是一个热门的开源项目。今天我们简单介绍一下JavaCV的技术,然后简单介绍一下如何使用JavaCV进行视频开发。

1、OpenCV介绍

JavaCV的名字来源于著名的OpenCV开源软件库。CV是Computer Vision的缩写,中文含义是“计算机视觉”,OpenCV整体含义就是“开源的计算机视觉和机器学习软件库”。

OpenCV主要用c语言开发,其中包含少量的c代码,包括大量的图形处理和计算机视觉功能。

OpenCV不依赖其他库,使用起来非常方便。当然,OpenCV也可以根据需要使用其他库。

OpenCV也可以用于嵌入式开发,我们可以从OpenCV中提取我们需要的代码来使用。

2、JavaCPP介绍

JavaCV是基于JavaCPP技术实现的,所以JavaCPP是JavaCV底层的技术核心。

JavaCPP提供了一种机制,让Java程序可以通过注解,以JNI的方式调用C++代码中的函数。

因为JavaCPP易于使用,所以它对Java程序员来说是一个福音。很多高性能软件都是用C/C实现的,可以被Java程序使用。

令人惊讶的是,当我们在github上搜索javacv时,我们发现JavaCV和JavaCPP都是由bytedeco开发的:

原来,bytedeco为了实现JavaCV,专门开发了JavaCPP。太厉害了!

3、JavaCV介绍

,以JavaCPP为基础,实现JavaCV相对简单。

e="font-size:15px;">这是在Intellj IDEA中打开JavaCV时的源代码结构:


从类的数量来看,我们发现JavaCV总共才68个类,太简单了!


而当我们随意打开一个类的实现代码时,我们会发现类的代码同样简单。例如,这是fFmpegFrameRecorder的源代码,功能这么强的类,总共才1300行代码,而且代码逻辑也不复杂:


现在,我们再看一下JavaCV的依赖。JavaCV的pom.xml文件内容如下所示:


可以看到,JavaCV使用了JavaCPP、OpenCV、FFmpeg的相关依赖。


4、使用JavaCV开发视频程序

JavaCV现在用得最多的地方是机器学习,如果我们搜索一下github上使用JavaCV的代码,就可以得出这个结论。但这里只简单介绍一下JavaCV在视频开发中的应用。


JavaCV对视频的概念进行了封装,视频系统被分成两个部分:


  • Grabber:从视频源抓取数据;
  • Recorder:将数据记录到使用视频的地方;

例如,我们如果需要从某个RTSP地址读取视频流,并且希望使用FFmpeg提供的功能,使用FFmpegFrameGrabber即可实现,下面是一段启动Grabber的代码:


FFmpegFrameGrabber fFmpegFrameGrabber = new FFmpegFrameGrabber(rtspAddress);fFmpegFrameGrabber.setFormat("rtsp");fFmpegFrameGrabber.setOption("rtsp_transport", "tcp");fFmpegFrameGrabber.start();

同样,我们将视频发送到某个目的地址,并且希望使用FFmpeg提供的功能,使用FFmpegFrameRecorder即可实现。


FFmpegFrameGrabber的grab()方法,用于实现抓取视频的功能;FFmpegFrameRecorder的record()方法,用于实现记录视频的功能。


在处理过程中,我们可以获得两类视频数据:


  • AVPacket:表示经过解复用,但是尚未解码的音视频数据;
  • AVFrame:帧数据,表示经过解复用,并且经过解码之后的音视频数据。

5、JavaCV的优缺点

使用JavaCV的优点是上手快,开发速度也特别快,即使没有多少视频知识的程序员,也能开发出稳定高效的视频处理程序。


但JavaCV的这个优点,也导致了它的缺点,因为JavaCV太简单好用,就会导致我们的程序一旦运行出现错误或者异常,我们不能通过Java程序本身来找错误,我们必须查找JavaCV所依赖的C/C++语言的OpenCV、FFmpeg库来定位错误,这对于Java程序员来说,绝对是一种折磨。