音视频:JavaCV 两种摄像头视频数据采集的方法

需要进行简单的音视频编程,如果不是特别熟悉C/C++,那么JavaCV应该是比较好的选择,下面记录一下使用JavaCV采集摄像头的两种方法。

1. OpenCV

使用OpenCVFrameGrabber采集指定摄像头(索引)的视频数据:

public class Sample01_Camera {
	public static void main(String[] args) throws Exception {
		OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
		grabber.setImageWidth(1280);
		grabber.setImageHeight(720);
		grabber.start();
		CanvasFrame canvas = new CanvasFrame("米虫2022");
		canvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		canvas.setAlwaysOnTop(true);
		Java2DFrameConverter converter = new Java2DFrameConverter();
		int fps = 1000 / 40;
		while (canvas.isDisplayable()) {
			canvas.showImage(converter.convert(grabber.grab()));
			TimeUnit.MILLISECONDS.sleep(fps);
		}
		grabber.close();
	}
}

使用OpenCV采集的视频数据会泛白,可以使用Java2DFrameConverter转化一下。

采集效果:

2. FFmpeg

使用FFmpeg采集摄像头需要知道摄像头的名称,可以使用下面的ffmpeg命令查看设备上的摄像头名称:

ffmpeg.exe -list_devices true -f dshow -i dummy  

跟OpenCV类似,只需要将OpenCVFrameGrabber换成FFmpegFrameGrabber,并设置format为dshow即可。

参考雷神的博客:https://blog.csdn.net/leixiaohua1020/article/details/38284961

public class Sample02_Camera {
	public static void main(String[] args) throws Exception {
		FFmpegFrameGrabber grabber = new FFmpegFrameGrabber("video=Integrated Camera");
		grabber.setImageWidth(1280);
		grabber.setImageHeight(720);
		grabber.setFormat("dshow");
		grabber.start();
		CanvasFrame canvas = new CanvasFrame("米虫2022");
		canvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		canvas.setAlwaysOnTop(true);
		int fps = 1000 / 40;
		while (canvas.isDisplayable()) {
			canvas.showImage(grabber.grab());
			TimeUnit.MILLISECONDS.sleep(fps);
		}
		grabber.close();
	}
}
posted @   HiIT青年  阅读(41)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示