引入架包:
<dependency>
<groupId>org.openpnp</groupId>
<artifactId>opencv</artifactId>
<version>4.5.5-1</version>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>ffmpeg-platform</artifactId>
<version>5.0-1.5.7</version>
</dependency>
调用本地视频头示例
package com.example.javacvstudy;
import org.bytedeco.javacv.*;
import org.springframework.boot.test.context.SpringBootTest;
import javax.swing.*;
@SpringBootTest
class ReadCanmen {
public static void main(String[] args) throws FrameGrabber.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);//退出
break;
}
canvas.showImage(grabber.grab());//获取摄像头图像并放到窗口上显示, 这里的Frame frame=grabber.grab(); frame是一帧视频图像
Thread.sleep(200);//50毫秒刷新一次图像
}
}
}
运行效果:
注意:
1、maven依赖后,会导致整个项目工程打包发布后的体积变得十分巨大
原因是ffmpeg和opencv两个依赖默认会把android,ios,linux,macos,windows以及各自不同cpu芯片下,86/64等所有版本的Jar会全部依赖进来,项目打包后体积剧增500M+
解决方法也比较简单,只需要根据我们生产环境真实平台环境,选取其中1个Jar包就可以了。下面以Linux 64位操作系统为例,maven配置如下:
<!-- javacv依赖 -->
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv</artifactId>
<version>4.5.5-1</version>
</dependency>
<!-- 引入ffmpeg依赖时单独把linux 64位的ffmpeg依赖引入即可 -->
<dependency>
<groupId>org.bytedeco.javacpp-presets</groupId>
<artifactId>ffmpeg</artifactId>
<version>5.0-1.5.7</version>
<classifier>linux-x86_64</classifier>
</dependency>
<!-- 引入ffmpeg依赖时单独把linux 64位的opencv依赖引入即可 -->
<dependency>
<groupId>org.bytedeco.javacpp-presets</groupId>
<artifactId>opencv</artifactId>
<version>4.5.5-1</version>
<classifier>linux-x86_64</classifier>
</dependency>