javacv:调取本地摄像头,抓取人脸,保存为图片
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:调取本地摄像头,抓取人脸,保存为图片的更多相关文章
- javaCV开发详解之6:本地音频(话筒设备)和视频(摄像头)抓取、混合并推送(录制)到服务器(本地)
javaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG.j ...
- 下载远程(第三方服务器)文件、图片,保存到本地(服务器)的方法、保存抓取远程文件、图片 将图片的二进制字节字符串在HTML页面以图片形式输出 asp.net 文件 操作方法
下载远程(第三方服务器)文件.图片,保存到本地(服务器)的方法.保存抓取远程文件.图片 将一台服务器的文件.图片,保存(下载)到另外一台服务器进行保存的方法: 1 #region 图片下载 2 3 ...
- C#抓取网络图片保存到本地
C#抓取网络图片保存到本地 System.Net.WebClient myWebClient = new System.Net.WebClient(); //将头像保存到服务器 string virP ...
- Python抓取网页中的图片到本地
今天在网上找了个从网页中通过图片URL,抓取图片并保存到本地的例子: #!/usr/bin/env python # -*- coding:utf- -*- # Author: xixihuang # ...
- 通过CURL抓取页面中的图片路径并下载到本地
1.首页是图片处理页面downpic.php <?phpfunction getImage($url,$filename="") { if($url=="" ...
- 利用python脚本(re)抓取美空mm图片
很久没有写博客了,这段时间一直在搞风控的东西,过段时间我把风控的内容整理整理发出来大家一起研究研究. 这两天抽空写了两个python爬虫脚本,一个使用re,一个使用xpath. 直接上代码——基于re ...
- iOS 抓取 UIwebview 上 所有 图片 并进行滚动播放
关于在UIwebview上添加滚动图片 两种滚动手势会混淆,应为webview有webview.scrollview的属性 故参照昨天的随笔 scrollview嵌套解决方案. 本篇随笔主要讲循环使用 ...
- php抓取ajax页面返回图片。
要抓取的页面:http://pic.hao123.com/ 当我们往下滚动的时候,图片是用ajax来动态获取的.这就需要我们仔细分析页面了. 可以看到,异步加载的ajax文件为: http://pic ...
- python抓取bing主页背景图片
最初Python2写法: #!/usr/bin/env python # -*- coding:utf-8 -*- # -*- author:nancy -*- # python2抓取bing主页所有 ...
随机推荐
- js 对象及空对象或数组及空数组的判断与比较
工作中经常会使用到,这里记录一下 判断是不是对象: let obj = {}; Object.prototype.toString.call(obj) == "[object Object] ...
- 常用SQL语句大全总结
出处:http://www.cnblogs.com/0351jiazhuang/p/4530366.html SQL是(Structured Query Language)结构化查询语言的简称,下面赵 ...
- php错误提示 open_basedir restriction in effect 解决
<VirtualHost *:80> DocumentRoot "D:/www/4w_raaaa_com_2017" ServerName www.raaaa.com: ...
- QWidget扩充父子关系
childAt(x, y) 获取在指定坐标处的子控件 parentWidget() 获取指定控件的父控件 s=label.parentWidget() #返回label的父 ...
- pyqt5模块介绍
python各种库介绍 https://wiki.python.org/moin/GuiProgramming PyQt5.QtWidgets 包含控件 PyQt5.QtGui 图 ...
- luogu P4389 付公主的背包
传送门 神仙题鸭!orz dkw 暴力就是完全背包 而完全背包可以和生成函数扯上关系,记第i种物品质量为\(a_i\),那么这种物品的生成函数\(G(i)=\sum_{j=0}^{\infty}x^{ ...
- 第26月第8天 android studio 国内
1. //东软信息学院 mirrors.neusoft.edu.cn 80 使用方法: 启动 Android SDK Manager ,打开主界面,依次选择「Tools」.「Options…」,弹 ...
- linux 共享内存的理解
1. 共享内存是在shmget时创建出来的, 在 shmget(USER_SHARE_MEM_KEY, sizeof(ADDR_NODE) , IPC_CREAT|0666)) ==-1) 的 s ...
- python 数据分析2
本节概要 Numpy详解 安装 Numpy的安装已经不想多说..在确保pip或pip3的路径被添加到系统环境变量里面之后,就可以直接用下面语句进行安装. pip install numpy or pi ...
- python - 获取win系统参数,发送/保存配置
import wmi import json c = wmi.WMI () msg = {} # 系统信息:系统版本,主机名,系统安装时间,系统位数,串口ID,总内存大小 system = ['Cap ...