为啥这段代码不能检测人脸
import org.opencv.core.*;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.opencv.objdetect.CascadeClassifier;
import util.ImageViewer;
import java.io.File;
public class FaceTest {
static {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}
public static void main(String[] args) {
detectFace("C:\\Users\\zrj\\Pictures\\tt.jpeg");
}
public static boolean detectFace(String imageFileName) {
File f = new File(imageFileName);
//原图片不存在直接退出
if (!f.exists()) {
System.out.println("\n Image File Not Found!");
return false;
}
//加载分类器
CascadeClassifier faceDetector =
new CascadeClassifier();
faceDetector.load("C:\\code\\VideoStreamConsumer\\src\\main\\resources\\lbpcascade_frontalcatface.xml");
//读取图像
Mat image0 = Imgcodecs.imread(imageFileName);
ImageViewer imageViewer = new ImageViewer(image0);
imageViewer.imshow();
Mat image = new Mat();
System.out.println("读取成功");
//检测人脸
Size min = new Size(100, 100);
MatOfRect faceDetections = new MatOfRect();
Imgproc.cvtColor(image0, image, Imgproc.COLOR_BGR2GRAY);
faceDetector.detectMultiScale(image, faceDetections);
//检测结果
Rect[] rects = faceDetections.toArray();
if (rects == null || rects.length == 0) {
System.out.println(rects.length);
return false;
}
int i = 0;
for (Rect rect : rects) {
Point x = new Point(rect.x, rect.y);
Point y = new Point(rect.x + rect.width, rect.y + rect.height);
//在image图片上画框,x,y可确定框的位置和大小,new Scalar(0, 255, 0)是框的颜色,自行调整
Imgproc.rectangle(image, x, y, new Scalar(0, 255, 0));
//保存监测的人脸小图片
Rect r = new Rect(x, y);
System.out.println(r.height + ":" + r.width);
Mat areaM = new Mat(image, r);
//保存监测的人脸小图片到tmp+序号的jpg文件
String tmpFilePath = "\\opencv" + i + ".jpg";
Imgcodecs.imwrite(tmpFilePath, areaM);
i++;
}
image.release();
return true;
}
}
这段代码的逻辑大概是这样:调用opencv自己的人脸分类器,然后用矩形框出人脸的范围,但是Rect[] rects = faceDetections.toArray();这段代码的返回值始终是一个空数组,也是就是他根本没有检测到人脸,这是为啥啊?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论