个性化阅读
专注于IT技术分析

Java中的图像处理S9(人脸检测)

在里面入门集在图像处理方面, Java的BufferedImage类用于处理图像, BufferedImage类的应用仅限于某些操作, 即我们可以修改给定输入图像的R, G, B值并生成修改后的图像。对于复杂的图像处理(例如面部/对象检测), 将使用OpenCV库, 我们将在本文中使用它。

首先, 我们需要为Java设置OpenCV, 建议使用蚀相同, 因为它易于使用和设置。

现在, 让我们了解面部检测所需的一些方法。

  1. CascadeClassifier() :此类用于加载经过训练的级联面孔集, 我们将使用它们来检测任何输入图像的面孔。
  2. Imcodecs.imread()/ Imcodecs.imwrite():这些方法用于将图像读取和写入为由OpenCV渲染的Mat对象。
  3. 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.jpg                                         Output.jpg

代码说明:

  1. 它加载本机OpenCV库以使用Java API。创建CascadeClassifier的实例, 并向其传递从中加载分类器的文件的名称。
  2. 接下来, 在分类器上使用detectMultiScale方法, 向其传递给定的图像和MatOfRect对象。
  3. MatOfRect负责在处理后进行人脸检测。
  4. 重复此过程以进行所有面部检测并用矩形标记图像, 最后将图像另存为output.png文件。

如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。

赞(0)
未经允许不得转载:srcmini » Java中的图像处理S9(人脸检测)

评论 抢沙发

评论前必须登录!