本博客为老魏原创,如需转载请留言咨询。


效果预览:(没办法,为了效果只能上像了,丑别介意。哈哈。。)

上代码:

  1 package com.lw.test;
2
3 import java.awt.Graphics;
4 import java.awt.event.MouseAdapter;
5 import java.awt.event.MouseEvent;
6 import java.awt.image.BufferedImage;
7
8 import javax.swing.JFrame;
9 import javax.swing.JPanel;
10 import javax.swing.WindowConstants;
11
12 import org.opencv.core.Core;
13 import org.opencv.core.Mat;
14 import org.opencv.core.MatOfDouble;
15 import org.opencv.core.MatOfRect;
16 import org.opencv.core.Point;
17 import org.opencv.core.Rect;
18 import org.opencv.core.Scalar;
19 import org.opencv.imgproc.Imgproc;
20 import org.opencv.ml.SVM;
21 import org.opencv.objdetect.CascadeClassifier;
22 import org.opencv.objdetect.HOGDescriptor;
23 import org.opencv.videoio.VideoCapture;
24 import org.opencv.videoio.Videoio;
25
26 public class CaptureBasic extends JPanel {
27
28 private BufferedImage mImg;
29
30 private BufferedImage mat2BI(Mat mat){
31 int dataSize =mat.cols()*mat.rows()*(int)mat.elemSize();
32 byte[] data=new byte[dataSize];
33 mat.get(0, 0,data);
34 int type=mat.channels()==1?
35 BufferedImage.TYPE_BYTE_GRAY:BufferedImage.TYPE_3BYTE_BGR;
36
37 if(type==BufferedImage.TYPE_3BYTE_BGR){
38 for(int i=0;i<dataSize;i+=3){
39 byte blue=data[i+0];
40 data[i+0]=data[i+2];
41 data[i+2]=blue;
42 }
43 }
44 BufferedImage image=new BufferedImage(mat.cols(),mat.rows(),type);
45 image.getRaster().setDataElements(0, 0, mat.cols(), mat.rows(), data);
46
47 return image;
48 }
49
50 public void paintComponent(Graphics g){
51 if(mImg!=null){
52 g.drawImage(mImg, 0, 0, mImg.getWidth(),mImg.getHeight(),this);
53 }
54 }
55
56 public static void main(String[] args) {
57 try{
58 System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
59
60 Mat capImg=new Mat();
61 VideoCapture capture=new VideoCapture(0);
62 int height = (int)capture.get(Videoio.CAP_PROP_FRAME_HEIGHT);
63 int width = (int)capture.get(Videoio.CAP_PROP_FRAME_WIDTH);
64 if(height==0||width==0){
65 throw new Exception("camera not found!");
66 }
67
68 JFrame frame=new JFrame("camera");
69 frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
70 CaptureBasic panel=new CaptureBasic();
71 panel.addMouseListener(new MouseAdapter() {
72 @Override
73 public void mouseClicked(MouseEvent arg0) {
74 System.out.println("click");
75 }
76 @Override
77 public void mouseMoved(MouseEvent arg0) {
78 System.out.println("move");
79
80 }
81 @Override
82 public void mouseReleased(MouseEvent arg0) {
83 System.out.println("mouseReleased");
84 }
85 @Override
86 public void mousePressed(MouseEvent arg0) {
87 System.out.println("mousePressed");
88 }
89 @Override
90 public void mouseExited(MouseEvent arg0) {
91 System.out.println("mouseExited");
92 //System.out.println(arg0.toString());
93 }
94 @Override
95 public void mouseDragged(MouseEvent arg0) {
96 System.out.println("mouseDragged");
97 //System.out.println(arg0.toString());
98 }
99
100   });
101 frame.setContentPane(panel);
102 frame.setVisible(true);
103 frame.setSize(width+frame.getInsets().left+frame.getInsets().right,
104 height+frame.getInsets().top+frame.getInsets().bottom);
105 int n=0;
106 Mat temp=new Mat();
107 while(frame.isShowing()&& n<500){
108 //System.out.println("第"+n+"张");
109 capture.read(capImg);
110 Imgproc.cvtColor(capImg, temp, Imgproc.COLOR_RGB2GRAY);
111 //Imgcodecs.imwrite("G:/opencv/lw/neg/back"+n+".png", temp);
112 panel.mImg=panel.mat2BI(detectFace(capImg));
113 panel.repaint();
114 //n++;
115 //break;
116 }
117 capture.release();
118 frame.dispose();
119 }catch(Exception e){
120 System.out.println("例外:" + e);
121 }finally{
122 System.out.println("--done--");
123 }
124
125 }
126 /**
127 * opencv实现人脸识别
128 * @param img
129 */
130 public static Mat detectFace(Mat img) throws Exception
131 {
132
133 System.out.println("Running DetectFace ... ");
134 // 从配置文件lbpcascade_frontalface.xml中创建一个人脸识别器,该文件位于opencv安装目录中
135 CascadeClassifier faceDetector = new CascadeClassifier("D:\\TDDOWNLOAD\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_alt.xml");
136
137
138 // 在图片中检测人脸
139 MatOfRect faceDetections = new MatOfRect();
140
141 faceDetector.detectMultiScale(img, faceDetections);
142
143 //System.out.println(String.format("Detected %s faces", faceDetections.toArray().length));
144
145 Rect[] rects = faceDetections.toArray();
146 if(rects != null && rects.length >= 1){
147 for (Rect rect : rects) {
148 Imgproc.rectangle(img, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),
149 new Scalar(0, 0, 255), 2);
150 }
151 }
152 return img;
153 }
154
155
156 /**
157 * opencv实现人型识别,hog默认的分类器。所以效果不好。
158 * @param img
159 */
160 public static Mat detectPeople(Mat img) {
161 //System.out.println("detectPeople...");
162 if (img.empty()) {
163 System.out.println("image is exist");
164 }
165 HOGDescriptor hog = new HOGDescriptor();
166 hog.setSVMDetector(HOGDescriptor.getDefaultPeopleDetector());
167 System.out.println(HOGDescriptor.getDefaultPeopleDetector());
168 //hog.setSVMDetector(HOGDescriptor.getDaimlerPeopleDetector());
169 MatOfRect regions = new MatOfRect();
170 MatOfDouble foundWeights = new MatOfDouble();
171 //System.out.println(foundWeights.toString());
172 hog.detectMultiScale(img, regions, foundWeights);
173 for (Rect rect : regions.toArray()) {
174 Imgproc.rectangle(img, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),new Scalar(0, 0, 255), 2);
175 }
176 return img;
177 }
178
179 }

【opencv】Java实现opencv 调用本地摄像头,实现人脸识别、人形识别、人眼识别的更多相关文章

  1. H5混合开发二维码扫描以及调用本地摄像头

    今天主管给了我个需求,说要用混合开发,用H5调用本地摄像头进行扫描二维码,我之前有做过原生安卓的二维码扫一扫,主要是通过调用zxing插件进行操作的,其中还弄了个闪光灯.但是纯H5的没接触过,心里没底 ...

  2. 调用本地摄像头拍照(H5和画布)

    关于H5 和 画布 调用本地摄像头拍照功能的实现 1.代码的实现(html部分) <input type="button" title="开启摄像头" v ...

  3. 利用html5调用本地摄像头拍照上传图片[转]

    利用html5调用本地摄像头拍照上传图片   html5概念啥的就不废话了,不知道的 百度, 谷歌一堆..今天学了学html5中的Canvas结合新增的<video>标签来获取本地摄像头, ...

  4. java命令行调用本地文件协议hikvideoclient://

    最近在做一个视频项目,项目中需要通过调用海康本地协议打开视频播放器,起初尝试通过Process/ProcessBuilder无解,因为这个是调用本地应用程序的. 我要调用的是本地伪协议,最终通过一些研 ...

  5. HTML5调用本地摄像头画面,拍照,上传服务器

    实现功能和适用业务 采集本地摄像头获取摄像头画面,拍照保存,上传服务器: 前端上传图片处理,展示,缩小,裁剪,上传服务器 实现步骤 调取本地摄像头(getUserMedia)/上传图片,将图片/视频显 ...

  6. 调用本地摄像头并通过canvas拍照

    首先我们需要新建一个video标签,并且放到html里边 var video = document.createElement("video"); video.autoplay=& ...

  7. 前端调用本地摄像头实现拍照(vue)

    由于调用摄像头有使用权限,只能在本地运行,线上需用https域名才可以使用. <template> <div class="camera_outer"> & ...

  8. 利用html5调用本地摄像头拍照上传图片

    这个是前台HTML的代码. <div id="contentHolder"> <video id="video" width="32 ...

  9. H5实现调用本地摄像头实现实时视频以及拍照功能

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

随机推荐

  1. 2018.12-2019.1 TO-DO LIST

    AC自动机 P3808 [模板]AC自动机(简单版)(完成时间:2018.12.06) P3796 [模板]AC自动机(加强版)(完成时间:2018.12.06) P2444 [POI2000]病毒( ...

  2. VMware 虚拟机安装(使用CentOS镜像)

    (1)启动虚拟机,点击"文件"-->"新建虚拟机",选择安装类型,推荐"典型".       (2)选择稍后安装操作系统       ...

  3. VSCode 微信小程序扩展开发

    写在前面 为什么要开发这个扩展呢,是因为微信开发者工具自身不支持页面引入组件的跳转,人工根据引入组件路径查看对应代码的方式,效率偏低.就形如这样的json文件,引入了多个组件,比如要查看 " ...

  4. Django之模版层

    一.模版简介 你可能已经注意到我们在例子视图中返回文本的方式有点特别,也就是说,HTML被直接硬编码在python代码之中. def current_datetime(request): now = ...

  5. ABP 适用性改造 - 精简 ABP CLI 生成的项目结构

    Overview 不管是公司或者个人都会有不同的开发习惯,通过建立项目模板,既可以使开发人员聚焦于业务功能的开发,也可以在一定程度上统一不同开发人员之间的开发风格.在使用 ABP 框架的过程中,对于 ...

  6. 错误提示:Access denied for user 'GC'@'localhost' (using password: YES)

    错误描述:使用的是C3P0连接池 Spring整合Mybatis时出现错误 java.sql.SQLException: Access denied for user 'GC'@'localhost' ...

  7. java例题_06 最大公约数&最小公倍数

    1 /*6 [程序 6 求最大公约数及最小公倍数] 2 题目:输入两个正整数 m 和 n,求其最大公约数和最小公倍数. 3 程序分析:利用辗除法. 4 */ 5 6 /*分析 7 * ======== ...

  8. 阿里云 RTC QoS 弱网对抗之变分辨率编码

    本文为 QoS 弱网优化系列的第二篇 作者|安基程.田伟峰 审校| 泰一 视频编码中的变分辨率问题及解决 变分辨率在弱网场景的实际应用中非常常见,网络状况不好的时候降低分辨率可以降低码率,减少块效应, ...

  9. 201871030134-余宝鹏 实验二 个人项目一 《D{0-1}KP》项目报告

    项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 1.掌握软件项目个人开发流程2.掌握Github发布软件项目的操作方法 这个作业帮助我在哪些方面实现学习目标 1. ...

  10. Idea使用指南--实用版

    idea使用指南--基础配置: 视频链接:https://www.bilibili.com/video/av21735428/?p=1 idea安装: 快捷方式create destop shortc ...