MAVEN:

<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv-platform</artifactId>
<version>1.4.2</version>
</dependency>
<dependency>
<groupId>org.bytedeco.javacpp-presets</groupId>
<artifactId>opencv-platform</artifactId>
<version>3.4.2-1.4.2</version>
</dependency>

代码:

import static org.bytedeco.javacpp.opencv_imgproc.COLOR_BGRA2GRAY;
import static org.bytedeco.javacpp.opencv_imgproc.cvtColor;
import static org.bytedeco.javacpp.opencv_imgproc.rectangle;
import static org.bytedeco.javacpp.opencv_imgproc.resize; import javax.swing.JFrame; import org.bytedeco.javacpp.opencv_core.Mat;
import org.bytedeco.javacpp.opencv_core.Rect;
import org.bytedeco.javacpp.opencv_core.RectVector;
import org.bytedeco.javacpp.opencv_core.Scalar;
import org.bytedeco.javacpp.opencv_core.Size;
import org.bytedeco.javacpp.opencv_imgcodecs;
import org.bytedeco.javacpp.opencv_objdetect.CascadeClassifier;
import org.bytedeco.javacv.CanvasFrame;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.FrameGrabber.Exception;
import org.bytedeco.javacv.OpenCVFrameConverter;
import org.bytedeco.javacv.OpenCVFrameGrabber; /**
* 调用本地摄像头窗口视频
*
* @author eguid
* @version 2016年6月13日
* @see javavcCameraTest
* @since javacv1.2
*/ public class FaceDetect { public static void main(String[] args) throws Exception, InterruptedException {
// 里面的整数值代表第N个摄像头,电脑内置默认为0,外置的从1开始
OpenCVFrameConverter.ToMat converterToMat = new OpenCVFrameConverter.ToMat();
OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
grabber.start(); // 开始获取摄像头数据
CanvasFrame canvas = new CanvasFrame("摄像头");// 新建一个窗口
canvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); canvas.setAlwaysOnTop(true);
Frame videoFrame = null;
Mat videoMat = null;
while (true) {
if (!canvas.isDisplayable()) {// 窗口是否关闭
grabber.stop();// 停止抓取
grabber.close();
System.exit(2);// 退出
}
// 获取摄像头图像并放到窗口上显示, 这里的Frame是一帧视频图像
videoFrame = grabber.grab();
videoMat = converterToMat.convert(videoFrame);
Mat videoMatGray = new Mat();
// 图片灰度处理,更容易识别出人脸
cvtColor(videoMat, videoMatGray, COLOR_BGRA2GRAY);
Mat detectFace = detectFace(videoMat);
videoFrame = converterToMat.convert(detectFace);
canvas.showImage(videoFrame);// 显示带方框的人脸
Thread.sleep(50);// 50毫秒刷新一次图像
}
} /**
* 人脸检测
*
* @param videoMat
* @return
* @throws Exception
*/
public static Mat detectFace(Mat videoMat) throws Exception { System.out.println("Running DetectFace ... ");
// 从配置文件lbpcascade_frontalface.xml中创建一个人脸识别器,该文件位于opencv安装目录中
CascadeClassifier faceDetector = new CascadeClassifier(
"D:\\app\\opencv3.4.2\\sources\\data\\haarcascades\\haarcascade_frontalface_alt.xml");
// 在图片中检测人脸
RectVector faces = new RectVector();
faceDetector.detectMultiScale(videoMat, faces);
System.out.println(String.format("Detected %s faces", faces.size()));
Rect[] rects = faces.get();
if (rects != null && rects.length >= 1) {
for (Rect rect : rects) {
rectangle(videoMat, rect, Scalar.RED);
saveFace(videoMat, rect);
}
}
faceDetector.close();
return videoMat;
} /**
* 抓取人脸保存为图片
*
* @param image
* @param rect
*/
private static void saveFace(Mat image, Rect rect) {
Mat sub = image.rowRange(rect.y(), rect.y() + rect.height()).colRange(rect.x(), rect.x() + rect.width());
Mat mat = new Mat();
Size size = new Size(100, 100);
resize(sub, mat, size);
opencv_imgcodecs.imwrite("d:\\test\\capture\\" + System.currentTimeMillis() + ".png", mat);
}
}

javacv:调取本地摄像头,抓取人脸,保存为图片的更多相关文章

  1. javaCV开发详解之6:本地音频(话筒设备)和视频(摄像头)抓取、混合并推送(录制)到服务器(本地)

    javaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG.j ...

  2. 下载远程(第三方服务器)文件、图片,保存到本地(服务器)的方法、保存抓取远程文件、图片 将图片的二进制字节字符串在HTML页面以图片形式输出 asp.net 文件 操作方法

    下载远程(第三方服务器)文件.图片,保存到本地(服务器)的方法.保存抓取远程文件.图片   将一台服务器的文件.图片,保存(下载)到另外一台服务器进行保存的方法: 1 #region 图片下载 2 3 ...

  3. C#抓取网络图片保存到本地

    C#抓取网络图片保存到本地 System.Net.WebClient myWebClient = new System.Net.WebClient(); //将头像保存到服务器 string virP ...

  4. Python抓取网页中的图片到本地

    今天在网上找了个从网页中通过图片URL,抓取图片并保存到本地的例子: #!/usr/bin/env python # -*- coding:utf- -*- # Author: xixihuang # ...

  5. 通过CURL抓取页面中的图片路径并下载到本地

    1.首页是图片处理页面downpic.php <?phpfunction getImage($url,$filename="") { if($url=="" ...

  6. 利用python脚本(re)抓取美空mm图片

    很久没有写博客了,这段时间一直在搞风控的东西,过段时间我把风控的内容整理整理发出来大家一起研究研究. 这两天抽空写了两个python爬虫脚本,一个使用re,一个使用xpath. 直接上代码——基于re ...

  7. iOS 抓取 UIwebview 上 所有 图片 并进行滚动播放

    关于在UIwebview上添加滚动图片 两种滚动手势会混淆,应为webview有webview.scrollview的属性 故参照昨天的随笔 scrollview嵌套解决方案. 本篇随笔主要讲循环使用 ...

  8. php抓取ajax页面返回图片。

    要抓取的页面:http://pic.hao123.com/ 当我们往下滚动的时候,图片是用ajax来动态获取的.这就需要我们仔细分析页面了. 可以看到,异步加载的ajax文件为: http://pic ...

  9. python抓取bing主页背景图片

    最初Python2写法: #!/usr/bin/env python # -*- coding:utf-8 -*- # -*- author:nancy -*- # python2抓取bing主页所有 ...

随机推荐

  1. [Android] Android 使用Greendao gradle 出现 Error:Unable to find method 'org.gradle.api.tasks.TaskInputs.file(Ljava/lang/Object;)

    Android 使用Greendao gradle 出现 Error:Unable to find method 'org.gradle.api.tasks.TaskInputs.file(Ljava ...

  2. java操作数据库:分页查询

    直接上.... 还是用之前的goods表,增加了一些数据 1.实体类Goods // 封装数据 public class Goods { private int gid; private String ...

  3. Entity Framework 6.0 常见异常及解决办法

    Ø  简介 本文主要记录 EF(Entity Framework) 在平时的开发中可能遇到的异常,以及应该如何去解决. 1.   System.InvalidOperationException 1) ...

  4. IDAPython教程(二)

    继续我们的主题—使用IDAPython 让逆向工程师的生活变得更美好. 这一部分,我们将着手处理一个非常常见的问题:shellcode和恶意软件使用hash算法混淆加载的函数和链接库,这项技术被广泛使 ...

  5. C# FTPHelper工具类

    /// <summary> /// Ftp /// </summary> public class FtpFileOperation { private string _ftp ...

  6. 第25月第8天 100-Days-Of-ML-Code

    1.100-Days-Of-ML-Code https://github.com/Avik-Jain/100-Days-Of-ML-Code https://github.com/llSourcell ...

  7. 采用shell脚本定时清理Tomcat日志

    1 Shell脚本案例 删除超过30天的日志文件 #!/bin/bash log_path=/mnt/software/apache-tomcat-.M22/logs d=`date +%Y-%m-% ...

  8. java中出现内存溢出的几种情况

    情况一:java.lang.OutOfMemoryError: Java heap space 原因:java堆内存不足,可能是真的不足,也可能是程序中有死循环 方案:1.调整JVM参数-Xms204 ...

  9. new、override关键字

    1.如果我想彻底覆盖父类的方法,此时可以使用override .假有classB继承自classA,代码如下: public class B : A { public bool _flag; publ ...

  10. android矩阵详解

    android矩阵:http://www.360doc.com/content/11/1215/11/7635_172396706.shtml