版本

Java1.8

opencv3.4

代码:

import java.awt.Graphics;

import java.awt.image.BufferedImage;
import javax.swing.JFrame;
import javax.swing.JPanel; import org.opencv.core.Mat;
import org.opencv.core.MatOfDouble;
import org.opencv.core.MatOfRect;
import org.opencv.core.Point;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.imgproc.Imgproc;
import org.opencv.objdetect.CascadeClassifier;
import org.opencv.objdetect.HOGDescriptor;
import org.opencv.videoio.VideoCapture;
import org.opencv.videoio.Videoio; public class FaceDetection extends JPanel { private BufferedImage mImg;
private static JFrame jFrame;
//Mat转成image
private BufferedImage matToImage(Mat mat){
int dataSize =(int) (mat.total()*mat.channels());
byte[] data=new byte[dataSize];
mat.get(0, 0,data);
int type=mat.channels()==1? BufferedImage.TYPE_BYTE_GRAY:BufferedImage.TYPE_3BYTE_BGR; if(type==BufferedImage.TYPE_3BYTE_BGR){
for(int i=0;i<dataSize;i+=3){
byte blue=data[i+0];
data[i+0]=data[i+2];
data[i+2]=blue;
}
}
//创建空的image
BufferedImage image=new BufferedImage(mat.cols(),mat.rows(),type);
//帧数据拷贝
image.getRaster().setDataElements(0, 0, mat.cols(), mat.rows(), data);
return image;
}
/**
* Jpanel调用repaint的时候会自动调用该绘图方法
*/
public void paintComponent(Graphics g){
if(mImg!=null){
g.drawImage(mImg, 0, 0, mImg.getWidth(),mImg.getHeight(),this);
}
}
static{
     //System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
System.load("D:/opencv/build/java/x64/opencv_java320.dll");
}
public static void creatFrame(JPanel jPanel,int width,int height){
jFrame = new JFrame("camera");
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setVisible(true);
//将内容添加到JFrame
jFrame.setSize(width,height);
jFrame.setContentPane(jPanel); } public static void main(String[] args) throws Exception {
//开启摄像头
VideoCapture capture=new VideoCapture(0);
FaceDetection jPanel=new FaceDetection();
creatFrame(jPanel,(int)capture.get(Videoio.CAP_PROP_FRAME_WIDTH),(int)capture.get(Videoio.CAP_PROP_FRAME_HEIGHT)); Mat mat=new Mat();
while(true){
if(!capture.isOpened()){
System.out.println("camera is not open");
System.exit(0);
}
capture.read(mat);
jPanel.mImg=jPanel.matToImage(detectFace(mat));
jPanel.repaint();
}
}
/**
* opencv实现人脸识别
* @param img
*/
public static Mat detectFace(Mat mat) throws Exception
{
// 从配置文件lbpcascade_frontalface.xml中创建一个人脸识别器,该文件位于opencv安装目录中
CascadeClassifier faceDetector = new CascadeClassifier("D:/opencv/sources/data/haarcascades/haarcascade_frontalface_alt.xml");
// 在图片中检测人脸
MatOfRect faceDetections = new MatOfRect();
faceDetector.detectMultiScale(mat, faceDetections); Rect[] rects = faceDetections.toArray();
for (Rect rect : rects) {
//标出脸
Imgproc.rectangle(mat,
new Point(rect.x, rect.y), //标记框的左下点坐标
new Point(rect.x + rect.width, rect.y + rect.height), //标记框的右上点坐标
new Scalar(0, 255, 0), //颜色
2); //粗细
}
return mat;
} }

Java+opencv实现人脸检测的更多相关文章

  1. 【转载】opencv实现人脸检测

    全文转载自CSDN的博客(不知道怎么将CSDN的博客转到博客园,应该没这功能吧,所以直接复制全文了),转载地址如下 http://blog.csdn.net/lsq2902101015/article ...

  2. OpenCV学习系列(一) Mac下OpenCV + xcode人脸检测实现

    # OpenCV学习系列(一) Mac下OpenCV + xcode人脸检测实现 [-= 博客目录 =-] 1-学习目标 1.1-本章介绍 1.2-实践内容 1.3-相关说明 2-学习过程 2.1-环 ...

  3. OpenCV实现人脸检测

    OpenCV实现人脸检测(转载)  原文链接:https://www.cnblogs.com/mengdd/archive/2012/08/01/2619043.html 本文介绍最基本的用OpenC ...

  4. 利用html5、websocket和opencv实现人脸检测

    最近学习人脸识别相关的东西,在MFC下使用OpenCV做了一个简单的应用.训练需要较多的数据,windows应用程序终究还是不方便,于是想着做成CS模式:检测识别都放在服务器端,视频获取和显示都放在网 ...

  5. java+opencv实现人脸识别程序记录

    结果 基本实现了识别的功能.基本的界面如下 界面长得比较丑,主要是JavaSwing写界面比较麻烦,写个菜单栏都要那么多代码.目前不打算改了. 实现的思路是:使用opencv中自带的OpenCVFra ...

  6. 基于OpenCv的人脸检测、识别系统学习制作笔记之三

    1.在windows下编写人脸检测.识别系统.目前已完成:可利用摄像头提取图像,并将人脸检测出来,未进行识别. 2.在linux下进行编译在windows环境下已经能运行的代码. 为此进行了linux ...

  7. 基于OpenCv的人脸检测、识别系统学习制作笔记之一

    基于OpenCv从视频文件到摄像头的人脸检测 在OpenCv中读取视频文件和读取摄像头的的视频流然后在放在一个窗口中显示结果其实是类似的一个实现过程. 先创建一个指向CvCapture结构的指针 Cv ...

  8. Python学习--使用dlib、opencv进行人脸检测标注

    参考自https://www.pyimagesearch.com/2017/04/03/facial-landmarks-dlib-opencv-python/ 在原有基础上有一部分的修改(image ...

  9. OpenCV + Python 人脸检测

    必备知识 Haar-like opencv api 读取图片 灰度转换 画图 显示图像 获取人脸识别训练数据 探测人脸 处理人脸探测的结果 实例 图片素材 人脸检测代码 人脸检测结果 总结 下午的时候 ...

随机推荐

  1. css的再深入9(更新中···)

    一 单位 1.px 就是一个基本的单位 像素 2.em 也是一个单位 用父级元素的字体大小乘以em前面的数字.如果父级没有就继承上一个父级直到body,如果body没有那就默认是16px. 3.rem ...

  2. Linux下更新Git

     查看git版本,卸载旧版本(如果没有安装git请直接到下一步) git --version yum remove git  安装依赖软件 yum install curl-devel expat-d ...

  3. linux解压类型总结

    1.*.tar 用 tar –xvf 解压2.*.gz 用 gzip -d或者gunzip 解压3.*.tar.gz和*.tgz 用 tar –xzf 解压4.*.bz2 用 bzip2 -d或者用b ...

  4. docker从容器里面拷文件到宿主机或从宿主机拷文件到docker容器里面

    1.从容器里面拷文件到宿主机? 答:在宿主机里面执行以下命令 docker cp 容器名:要拷贝的文件在容器里面的路径       要拷贝到宿主机的相应路径 示例: 假设容器名为testtomcat, ...

  5. (转)浏览器对象window,history,location,navigator,screen

    1.window对象:当前的浏览器窗口 window对象是BOM的核心,window对象指当前的浏览器窗口 所有JavaScript全局对象.函数以及变量均自动成为window对象的成员 全局变量是w ...

  6. spring cloud 版本号与 boot版本之间的对应关系(版本不对,会导致pom无法引入)

    版本号规则 Spring Cloud并没有熟悉的数字版本号,而是对应一个开发代号. 开发代号看似没有什么规律,但实际上首字母是有顺序的,比如:Dalston版本,我们可以简称 D 版本,对应的 Edg ...

  7. 【文献08】多移动机器人轨迹跟踪控制系统设计与实现-运动学ADRC控制

    参考: 陈俊, 俞立, 滕游. 多移动机器人轨迹跟踪控制系统设计与实现[J]. 计算机测量与控制, 2017(7). https://drive.wps.cn/view/p/28819052019?f ...

  8. Netflix分享构建Microservices的经验

    Netflix分享构建Microservices的经验 http://t.cn/Rwjgutw 新词:Microservices.我觉得就是service oriented architecture的 ...

  9. android -------- OkGo (让网络请求更简单的框架)

    项目地址:https://github.com/jeasonlzy 该库是封装了okhttp的网络框架,可以与RxJava完美结合,比Retrofit更简单易用.支持大文件上传下载,上传进度回调,下载 ...

  10. 使用Metasploit渗透攻击windows系统(一)

    攻击机:kaili ip:192.168.80.157 目标机:win7 IP:192.168.80.158 这里用两种方法去创建meterpreter会话: 1)利用kali中的msfvenom生成 ...