安装Javacv

  • 简介:javacv是使用java的视觉库,包含了Opencv、FFmpeg等接口

  • github-javacv

  • 若是Intellij IEDA可直接新建Maven项目,在pom.mxl中添加依赖,IDEA将自动下载依赖库

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>Camera</groupId><artifactId>cTest</artifactId><version>1.0-SNAPSHOT</version><!--添加如下依赖--><dependencies><dependency><groupId>org.bytedeco</groupId><artifactId>javacv-platform</artifactId><version>1.5</version></dependency></dependencies></project>

调用实例

import org.bytedeco.javacv.*;
import javax.swing.*;public class test {public void testCamera(){try {//VideoInputFrameGrabber grabber = VideoInputFrameGrabber.createDefault(0);OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);grabber.start();//开始获取摄像头数据CanvasFrame canvas = new CanvasFrame("摄像头");//新建一个窗口canvas.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);canvas.setAlwaysOnTop(true);while (true) {if (!canvas.isDisplayable()) {//窗口是否关闭grabber.stop();//停止抓取System.exit(-1);//退出}Frame frame = grabber.grab();canvas.showImage(frame);//获取摄像头图像并放到窗口上显示,frame是一帧视频图像Thread.sleep(30);//50毫秒刷新一次图像}}catch (FrameGrabber.Exception e){e.printStackTrace();}catch (InterruptedException e){e.printStackTrace();}}
}

录制视频

import org.bytedeco.ffmpeg.global.avcodec;
import org.bytedeco.ffmpeg.global.avutil;
import org.bytedeco.javacv.*;
import org.bytedeco.opencv.global.opencv_imgproc;
import org.bytedeco.opencv.opencv_core.Mat;
import org.bytedeco.opencv.opencv_core.Point;
import org.bytedeco.opencv.opencv_core.Scalar;import javax.swing.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.text.SimpleDateFormat;
import java.util.Date;public class VideoRecorder implements Runnable{private static final int FRAME_RATE = 30;private static final int MOTION_FACTOR = 1;private CanvasFrame canvas = null;private FFmpegFrameRecorder recorder = null;private VideoInputFrameGrabber grabber = null;private OpenCVFrameConverter.ToIplImage converter =  null;private Window win = null;private Point point = null;private Scalar scalar = null;private SimpleDateFormat sdf = null;private void configVideo(String strFileName){try {grabber = VideoInputFrameGrabber.createDefault(0);grabber.start();}catch (FrameGrabber.Exception e){e.printStackTrace();}int imgWidth = grabber.getImageWidth();int imgHeight = grabber.getImageHeight();System.out.printf("W:%d H:%d\n",imgWidth,imgHeight);recorder = new FFmpegFrameRecorder(strFileName,imgWidth,imgHeight);recorder.setFormat("flv");recorder.setFrameRate(FRAME_RATE);recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);recorder.setVideoBitrate((int)((imgWidth*imgHeight*FRAME_RATE)*MOTION_FACTOR*0.07));recorder.setPixelFormat(avutil.AV_PIX_FMT_YUV420P);converter = new OpenCVFrameConverter.ToIplImage();point = new Point(10, 50);scalar = new Scalar(255, 0, 0, 0);sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");try{recorder.start();//start开始就开始保存数据}catch (FrameRecorder.Exception e){e.printStackTrace();}}private void configWindow(){canvas = new CanvasFrame("Video");canvas.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);canvas.setAlwaysOnTop(true);}private void encodeFrame(Frame frame,long timestamp){try{long t = timestamp * 1000L;if (t > recorder.getTimestamp()) {recorder.setTimestamp(t);}recorder.record(frame);}catch (FrameRecorder.Exception e){e.printStackTrace();}}private void stopRecorder(){if(recorder!=null){try{recorder.stop();recorder.release();}catch (FrameRecorder.Exception e){e.printStackTrace();}}}public void run(){configWindow();configVideo("test.flv");try {while (true) {if (!canvas.isDisplayable()) {grabber.stop();System.exit(-1);}Mat mat = converter.convertToMat(grabber.grab());Date date = new Date();opencv_imgproc.putText(mat,sdf.format(date),point,opencv_imgproc.CV_FONT_VECTOR0,1.0, scalar, 1, 0,false);canvas.showImage(converter.convert(mat));encodeFrame(converter.convert(mat),System.currentTimeMillis());//Thread.sleep(30);}}catch (FrameGrabber.Exception e){e.printStackTrace();}}
}

参考链接

  • JAVA中通过JavaCV实现跨平台视频/图像处理-调用摄像头
  • javacv编码mp4视频

JavaCV调用摄像头相关推荐

  1. JavaCV的摄像头实战之十二:性别检测

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是<JavaCV的摄像头实战> ...

  2. JavaCV的摄像头实战之八:人脸检测

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是<JavaCV的摄像头实战> ...

  3. java模拟摄像头传输照片_java调用摄像头保存图片

    [实例简介] java调用摄像头保存图片,通过Face++和Javacv判断如果视频中含有人脸,保存图片到本地指定路径! [实例截图] [核心代码] c93f0c67-a726-4643-a4c1-0 ...

  4. JavaCV的摄像头实战之十四:口罩检测

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是<JavaCV的摄像头实战> ...

  5. 摄像头自建html直播,html5调用摄像头实现拍照

    html5调用摄像头实现拍照 拍照 var video=document.getElementById("video"); var context=canvas.getContex ...

  6. 关于Unity调用摄像头扫描二维码与生成二维码的实现方法

    1.常用的生成二维码网址 https://cli.im/ 2.上官网下载二维码插件 http://zxingnet.codeplex.com/ 3.将下载的插件中zxing.unity.dll文件放入 ...

  7. python打开摄像头获取图片_Python基于opencv调用摄像头获取个人图片的实现方法

    接触图像领域的应该对于opencv都不会感到陌生,这个应该算是功能十分强劲的一个算法库了,当然了,使用起来也是很方便的,之前使用Windows7的时候出现多该库难以安装成功的情况,现在这个问题就不存在 ...

  8. 调用摄像头_摄像头 | 浏览器调用摄像头并实现截图保存的效果

    ​为了在QT上实现打开摄像头,拍照等操作.就写了这个. 1. 写一个vue组件 先写一个vue的组件,其内容基本如下: <el-button type="primary" @ ...

  9. CV:基于face库利用cv2调用摄像头(或视频)根据人脸图片实现找人(先指定要识别已知人脸的文件夹转为numpy_array+输入新图片遍历已有numpy_array)

    CV:基于face库利用cv2调用摄像头(或视频)根据人脸图片实现找人(先指定要识别已知人脸的文件夹转为numpy_array+输入新图片遍历已有numpy_array) 目录 输出结果 设计思路 核 ...

  10. CV:基于keras利用cv2自带两步检测法对《跑男第六季第五期》之如花片段(或调用摄像头)进行实时性别脸部表情检测

    CV:基于keras利用cv2自带两步检测法对<跑男第六季第五期>之如花片段(或调用摄像头)进行实时性别&脸部表情检测 目录 输出结果 设计思路 核心代码 输出结果 设计思路 核心 ...

最新文章

  1. numpy和torch数据操作对比
  2. 调用支付宝接口android最新,Android 外接sdk之支付宝
  3. 16.1116 NOIP 考前模拟(信心题)
  4. MySQL在线DDL工具pt-osc
  5. DelphiXE下的字符串变化
  6. 啊金学习javascript系列一之javascript整体印象
  7. numpy 维度与轴的问题
  8. Java 多线程--- 创建线程、Thread类、synchronized
  9. ckdeitor的使用方法
  10. vue 生成PDF(A4标准PDF分页)
  11. 【数据库】达梦数据库更新key文件
  12. 讲情怀的韦晓亮和他的科技教育因果论
  13. asu在线硕士计算机课程,亚利桑那州立大学将在中国推出在线硕士学历项目 纯中文授课...
  14. 工作无小事(第六周(2014.3.31~2014.4.6))
  15. Android Fota(差分包)制作
  16. 黑马程序员 网络编程1
  17. 使用pdfbox2.0.15版本,将pdf文件转为图片时,中文显示乱码
  18. 从Palm OS向Series 60 Platform移植(转)
  19. Web前端:一些必不可少的惊人的网络开发工具和资源
  20. android 3d车辆轨迹,极限汽车轨迹3D

热门文章

  1. ModelAndView详解
  2. 上网行为管理网络分析系统
  3. 阿里巴巴矢量图标网使用的小方法
  4. 毕设-基于SSM仓库管理系统
  5. 基于javaweb+JSP+Servlet火车票网上订票系统(前台、后台)
  6. Alexa交叉编译(avs-device-sdk)
  7. linux系统版本下载
  8. Pytest报告添加描述时报错:AttributeError: ‘TestReport‘ object has no attribute ‘description‘
  9. UG(NX)二次开发 BlockUI 集列表使用方法
  10. 考试计算机网络基础知识,事业单位考试计算机网络基础知识试题及答案