java opencv识别图像是否是同一个人,贴代码
时间: 2023-12-14 16:38:59 浏览: 87
opencv图像相似度检测
以下是使用Java OpenCV进行人脸识别的示例代码:
```java
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 FaceRecognition {
public static void main(String[] args) {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
CascadeClassifier faceDetector = new CascadeClassifier("haarcascade_frontalface_alt.xml");
Mat image1 = Imgcodecs.imread("image1.jpg");
MatOfRect faceDetections1 = new MatOfRect();
faceDetector.detectMultiScale(image1, faceDetections1);
for (Rect rect : faceDetections1.toArray()) {
Imgproc.rectangle(image1, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),
new Scalar(0, 255, 0));
}
Mat image2 = Imgcodecs.imread("image2.jpg");
MatOfRect faceDetections2 = new MatOfRect();
faceDetector.detectMultiScale(image2, faceDetections2);
for (Rect rect : faceDetections2.toArray()) {
Imgproc.rectangle(image2, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),
new Scalar(0, 255, 0));
}
if(faceDetections1.toArray().length>0 && faceDetections2.toArray().length>0){
System.out.println("Both images have faces");
// Do face recognition
}else{
System.out.println("At least one of the images does not have a face");
}
}
}
```
在这个示例中,我们使用OpenCV的CascadeClassifier类来加载一个预先训练好的分类器文件(haarcascade_frontalface_alt.xml),该文件用于检测图像中是否存在人脸。我们使用detectMultiScale方法在图像中检测人脸,并使用rectangle方法在检测到的每个人脸周围绘制一个矩形。
在比较两个图像时,我们只需要检查两个MatOfRect对象中的数组长度是否大于零,如果两个图像都检测到了至少一个人脸,则进行人脸识别。
阅读全文