【Java中的图像处理S9(人脸检测)】在里面入门集在图像处理方面, Java的BufferedImage类用于处理图像, BufferedImage类的应用仅限于某些操作, 即我们可以修改给定输入图像的R, G, B值并生成修改后的图像。对于复杂的图像处理(例如面部/对象检测), 将使用OpenCV库, 我们将在本文中使用它。
首先, 我们需要为Java设置OpenCV, 建议使用蚀相同, 因为它易于使用和设置。
现在, 让我们了解面部检测所需的一些方法。
- CascadeClassifier() :此类用于加载经过训练的级联面孔集, 我们将使用它们来检测任何输入图像的面孔。
- Imcodecs.imread()/ Imcodecs.imwrite():这些方法用于将图像读取和写入为由OpenCV渲染的Mat对象。
- Imgproc.rectangle():用于生成概述检测到的面的矩形框, 它带有四个参数-input_image, top_left_point, bottom_right_point和color_of_border。
//Java program to demonstrate face detection
package ocv;
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 FaceDetector
{
public static void main(String[] args)
{//For proper execution of native libraries
//Core.NATIVE_LIBRARY_NAME must be loaded before
//calling any of the opencv methods
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
//Face detector creation by loading source cascade xml file
//using CascadeClassifier.
//the file can be downloade from
//https://github.com/opencv/opencv/blob/master/data/haarcascades/
//haarcascade_frontalface_alt.xml
//and must be placed in same directory of the source java file
CascadeClassifier faceDetector = new CascadeClassifier();
faceDetector.load( "haarcascade_frontalface_alt.xml" );
//Input image
Mat image = Imgcodecs.imread( "E:\\input.jpg" );
//Detecting faces
MatOfRect faceDetections = new MatOfRect();
faceDetector.detectMultiScale(image, faceDetections);
//Creating a rectangular box showing faces detected
for (Rect rect : faceDetections.toArray())
{
Imgproc.rectangle(image, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height), new Scalar( 0 , 255 , 0 ));
}//Saving the output image
String filename = "Ouput.jpg" ;
Imgcodecs.imwrite( "E:\\" +filename, image);
}
}
输出如下:
Input.jpgOutput.jpg
代码说明:
- 它加载本机OpenCV库以使用Java API。创建CascadeClassifier的实例, 并向其传递从中加载分类器的文件的名称。
- 接下来, 在分类器上使用detectMultiScale方法, 向其传递给定的图像和MatOfRect对象。
- MatOfRect负责在处理后进行人脸检测。
- 重复此过程以进行所有面部检测并用矩形标记图像, 最后将图像另存为output.png文件。
推荐阅读
- Java中的图像处理S10(为图像加水印)
- Java中的图像处理S8(创建镜像)
- Java中的图像处理S7(创建随机像素图像)
- Java中的图像处理S5(彩色图像转为红色,绿色,蓝色图像)
- 每日LeetCode力扣(21~25)
- 每日LeetCode力扣(36~40)
- 每日LeetCode力扣(26~30)
- #yyds干货盘点#RabbitMQ示例5(主题topic交换机)
- Android高手笔记 - 启动优化