4

OpenCV Java入门四 认出这是“一张脸”

 1 year ago
source link: https://blog.csdn.net/lifetragedy/article/details/123773790
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

经过前三个教程,我们可以知道了OpenCV的基本使用了。

今天,我们就要讲OpenCV中认出,这是一个人脸是怎么做的。

MatOfRect.detectMultiScale函数

OpenCV用的是detectMultiScale来认出这是一个脸的。记得,这只是认出这是一个脸,而不是这个脸是谁。

这个脸是谁我们会逐步展开,前面勿求夯实基础。

detectMultiScale需要两个参数(Mat src, MatOfRect objDetections);

  • 第一个函数,是传入的图片,带有人脸的图片;
  • 第二个函数,是把所有的这个图片里的人脸得到并输出到MatOfRect对象里;

比如说下面这个图片里,一共有5个脸,我们把脸一个个识别出来并在脸上用方框把它们标记出来。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAVEdJVENJQw==,size_20,color_FFFFFF,t_70,g_se,x_16

然后用我们前面教程中提到的ImageViewer类来显示带有“标识”的人脸。

ImageViewer.java



newCodeMoreWhite.png

DetectFace.java

这个是主类。

  1. 加载opencv_java343.dll;
  2. 加载人脸分拣器;
  3. 创建Mat对象;

然后我们开始把脸识别出来:

  1. 使用detectMultiScale把传入的Mat对象中含有脸的那些全部识别出来;
  2. 识别出来后我们可以使用for (Rect rect : objDetections.toArray())把所有的脸枚举出来;
  3. 使用Imgproc.rectangle在每个识别出来的脸上用“绿”色把它们一个个框出来;
  4. 使用ImageViewer的.imgShow显示标识出来的脸;


newCodeMoreWhite.png

运行效果如下

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAVEdJVENJQw==,size_20,color_FFFFFF,t_70,g_se,x_16

 把识别出来的脸存成文件

我们现在把识别出来的5张脸存成5个jpg图片。

制作一个写盘函数,很简单。

然后我们在我们的原来的代码中加入这个函数



newCodeMoreWhite.png

运行DetectFace.java,我们可以在D:\opencv-demo\face目录中得到5个写出的人脸的图片。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAVEdJVENJQw==,size_20,color_FFFFFF,t_70,g_se,x_16

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK