- OpenCV 教程
- OpenCV – 首页
- OpenCV – 概述
- OpenCV – 环境配置
- OpenCV – 存储图像
- OpenCV – 读取图像
- OpenCV – 写入图像
- OpenCV – 图形用户界面 (GUI)
- 绘图函数
- OpenCV – 绘制圆形
- OpenCV – 绘制直线
- OpenCV – 绘制矩形
- OpenCV – 绘制椭圆
- OpenCV – 绘制折线
- OpenCV – 绘制凸多边形
- OpenCV – 绘制带箭头的直线
- OpenCV – 添加文本
- 滤波
- OpenCV – 双边滤波
- OpenCV – 方框滤波
- OpenCV – 平方盒滤波
- OpenCV – Filter2D
- OpenCV – 膨胀
- OpenCV – 腐蚀
- OpenCV – 形态学操作
- OpenCV – 图像金字塔
- Sobel 导数
- OpenCV – Sobel 算子
- OpenCV – Scharr 算子
- 摄像头和人脸检测
- OpenCV – 使用摄像头
- OpenCV – 图像人脸检测
- 使用摄像头进行人脸检测
- OpenCV 有用资源
- OpenCV – 快速指南
- OpenCV – 有用资源
- OpenCV – 讨论
OpenCV – 图像人脸检测
**org.opencv.videoio** 包中的 **VideoCapture** 类包含用于使用系统摄像头捕获视频的类和方法。让我们一步一步地学习如何做到这一点。
步骤 1:加载 OpenCV 原生库
使用 OpenCV 库编写 Java 代码时,您需要做的第一步是使用 **loadLibrary()** 加载 OpenCV 的原生库。如下所示加载 OpenCV 原生库。
// Loading the core library System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
步骤 2:实例化 CascadeClassifier 类
**org.opencv.objdetect** 包中的 **CascadeClassifier** 类用于加载分类器文件。通过传递 **xml** 文件 **lbpcascade_frontalface.xml** 来实例化此类,如下所示。
// Instantiating the CascadeClassifier String xmlFile = "E:/OpenCV/facedetect/lbpcascade_frontalface.xml"; CascadeClassifier classifier = new CascadeClassifier(xmlFile);
步骤 3:检测人脸
您可以使用名为 **CascadeClassifier** 的类的 **detectMultiScale()** 方法检测图像中的人脸。此方法接受一个保存输入图像的 **Mat** 类的对象和一个保存检测到的人脸的 **MatOfRect** 类的对象。
// Detecting the face in the snap MatOfRect faceDetections = new MatOfRect(); classifier.detectMultiScale(src, faceDetections);
示例
以下程序演示了如何在图像中检测人脸。
import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.core.MatOfRect; import org.opencv.core.Point; import org.opencv.core.Rect; import org.opencv.core.Scalar; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc.Imgproc; import org.opencv.objdetect.CascadeClassifier; public class FaceDetectionImage { public static void main (String[] args) { // Loading the OpenCV core library System.loadLibrary( Core.NATIVE_LIBRARY_NAME ); // Reading the Image from the file and storing it in to a Matrix object String file ="E:/OpenCV/chap23/facedetection_input.jpg"; Mat src = Imgcodecs.imread(file); // Instantiating the CascadeClassifier String xmlFile = "E:/OpenCV/facedetect/lbpcascade_frontalface.xml"; CascadeClassifier classifier = new CascadeClassifier(xmlFile); // Detecting the face in the snap MatOfRect faceDetections = new MatOfRect(); classifier.detectMultiScale(src, faceDetections); System.out.println(String.format("Detected %s faces", faceDetections.toArray().length)); // Drawing boxes for (Rect rect : faceDetections.toArray()) { Imgproc.rectangle( src, // where to draw the box new Point(rect.x, rect.y), // bottom left new Point(rect.x + rect.width, rect.y + rect.height), // top right new Scalar(0, 0, 255), 3 // RGB colour ); } // Writing the image Imgcodecs.imwrite("E:/OpenCV/chap23/facedetect_output1.jpg", src); System.out.println("Image Processed"); } }
假设以上程序中指定了以下输入图像 **facedetection_input.jpg**。
输出
执行程序后,您将获得以下输出:
Detected 3 faces Image Processed
如果您打开指定路径,则可以观察到输出图像如下:
广告