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


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

上代码:

  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. 【odoo14】第二章、管理odoo实例

    本章主要介绍肖odoo实例添加用户自定义的模块.你可以从多个路径载入模块.但是建议你将自己的模块儿放在特定的目录当中,避免与odoo的核心模块混淆. 在这一章节,中我们主要涉及以下内容: 配置插件路径 ...

  2. ASP.NET Core 在 .NET 6 Preview 2 中的更新

    原文:<ASP.NET Core updates in .NET 6 Preview 2>,作者 Daniel Roth .NET 6 预览版 2 现已推出,其中包括许多对 ASP.NET ...

  3. Codeforces Round #538 D. Lunar New Year and a Wander

    题面: 传送门 题目描述: Bob想在公园散步.公园由n个点和m条无向边组成.当Bob到一个未经过的点时,他就会把这个点的编号记录在笔记本上.当且仅当Bob走完所有的点,他才会停下来.这时,Bob的笔 ...

  4. P1177【模板】快速排序(JAVA语言)

    import java.util.Scanner; import java.util.ArrayList; import java.util.Collections; import java.util ...

  5. fork、exec 和 exit 对 IPC 对象的影响

    GitHub: https://github.com/storagezhang Emai: debugzhang@163.com 华为云社区: https://bbs.huaweicloud.com/ ...

  6. java例题_11 求不重复数

    1 /*11 [程序 11 求不重复数字] 2 题目:有 1.2.3.4 这四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 3 程序分析:可填在百位.十位.个位的数字都是 1.2.3. ...

  7. pwn题命令行解题脚本

    目录 脚本说明 脚本内容 使用 使用示例 参考与引用 脚本说明 这是专门为本地调试与远程答题准备的脚本,依靠命令行参数进行控制. 本脚本支持的功能有: 本地调试 开启tmux调试 设置gdb断点,支持 ...

  8. 百度开源中国(Java)面经

    一.自我介绍 面试嘛,万年不变还是自我介绍,就说说你是干嘛的(专业是啥),为什么会选择该公司(说一说自己为何向往Java开发),再谈谈自己的优点(兴趣爱好).如果人家叫停了,就别一股脑接着讲了,停下来 ...

  9. CVPR2021| 继SE,CBAM后的一种新的注意力机制Coordinate Attention

    前言: 最近几年,注意力机制用来提升模型性能有比较好的表现,大家都用得很舒服.本文将介绍一种新提出的坐标注意力机制,这种机制解决了SE,CBAM上存在的一些问题,产生了更好的效果,而使用与SE,CBA ...

  10. E. 【例题5】生日相同

    解析 字符串操作,本题解采取了多关键词排序 Code #include <bits/stdc++.h> using namespace std; int f, n; struct node ...