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


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

上代码:

  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. javascript中的Strict模式

    目录 简介 使用Strict mode strict mode的新特性 强制抛出异常 简化变量的使用 简化arguments 让javascript变得更加安全 保留关键字和function的位置 总 ...

  2. Vue中去除文本框回车默认事件

    使用v-on:keydown.enter.prevent即可 <input type="password" class="form-control" id ...

  3. 在ASP.NET Core中用HttpClient(四)——提高性能和优化内存

    到目前为止,我们一直在使用字符串创建请求体,并读取响应的内容.但是我们可以通过使用流提高性能和优化内存.因此,在本文中,我们将学习如何在请求和响应中使用HttpClient流. 什么是流 流是以文件. ...

  4. ASPOSE.Cells & ASPOSE.Words 操纵Excel和Word文档的 .NET Core 实例

    Aspose.Total是Aspose公司旗下的最全的一套office文档管理方案,它提供的原生API可以对Word.Excel.PDF.Powerpoint.Outlook.CAD.图片.3D.ZI ...

  5. cookie跨域那些事儿

    一个请求从发出到返回,需要浏览器和服务端的协调配合.浏览器要把自己的请求参数带给服务端,服务端校验参数之后,除了返回数据,也可能会顺便把请求是否缓存,cookie等信息告诉浏览器.当请求是跨域请求的时 ...

  6. .NET 6 Preview 3 中 ASP.NET Core 的更新和改进

    原文:bit.ly/2Qb56NP 作者:Daniel Roth 译者:精致码农-王亮 .NET 6 预览版 3 现已推出,其中包括许多对新的 ASP.NET Core 改进.以下是本次预览版的新内容 ...

  7. leetcode 刷题(数组篇)1题 两数之和(哈希表)

    题目描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组中同一个元 ...

  8. Anacoda下报错conda command not found 以及TypeError: __new__() got an unexpected keyword argument 'serialized_options'

    在anacoda安装完成后,执行conda list命令,显示command not found 解决方法: 对于anaconda 2  , 输入export PATH=~/anaconda2/bin ...

  9. 【笔记】《Redis设计与实现》chapter9 数据库

    9.1 服务器中的数据库 Redis服务器将所有都保存在服务器状态redis.h/redisServer结构中 struct redisServer{ //... // 一个数组,保存着服务器中所有数 ...

  10. Java常用工具+类库合集

    1 常用工具 JVisual vm:可以直接通过软件包下载,支持本地以及远程JVM监控 JMH:Java Microbenchmark Harness,测试基准组件,精度可达纳秒级 JITWatch: ...