gpt4 book ai didi

java - 如何使用 OpenCV 在同一个 Java 程序中运行多个 haarcascade xml 文件?

转载 作者:太空宇宙 更新时间:2023-11-03 23:15:39 25 4
gpt4 key购买 nike

我是 OpenCV 的新手,我想运行一个 Java 程序来使用 OpenCV 进行人脸检测。

仅包括一个 haarcascade xml 文件不会给我预期的结果。所以我需要在同一个程序中运行两个、三个 haarcascade 文件。 (特别是“haarcascade_frontalface_alt.xml”和“haarcascade_profileface.xml”在一起)。

我试着用下面的代码来做,但没有成功。请说明如何进行。

谢谢。

public class LiveFeed extends WatchDogBaseFrame {

private DaemonThread myThread = null;
int count = 0;
VideoCapture webSource = null;
Mat frame = new Mat();
MatOfByte mem = new MatOfByte();
CascadeClassifier faceDetector1 = new CascadeClassifier("/home/erandi/NetBeansProjects/WatchDog/src/ueg/watchdog/view/haarcascade_frontalface_alt.xml");
CascadeClassifier faceDetector2 = new CascadeClassifier("/home/erandi/NetBeansProjects/WatchDog/src/ueg/watchdog/view/haarcascade_eye.xml");
MatOfRect faceDetections = new MatOfRect();

public LiveFeed(WatchDogBaseFrame parentFrame) {
super(parentFrame);
initComponents();
super.setCloseOperation();
jButtonExit.setVisible(false);
}

//class of demon thread
public class DaemonThread implements Runnable {

protected volatile boolean runnable = false;

@Override
public void run() {
synchronized (this) {
while (runnable) {
if (webSource.grab()) {
try {
webSource.retrieve(frame);
Graphics graphics = jPanelVideo.getGraphics();
faceDetector1.detectMultiScale(frame, faceDetections);
faceDetector2.detectMultiScale(frame, faceDetections);
for (Rect rect : faceDetections.toArray()) {
// System.out.println("ttt");
Imgproc.rectangle(frame, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),
new Scalar(0, 255, 0));
}
Imgcodecs.imencode(".bmp", frame, mem);
Image im = ImageIO.read(new ByteArrayInputStream(mem.toArray()));
BufferedImage buff = (BufferedImage) im;
if (graphics.drawImage(buff, 0, 0, getWidth(), getHeight() - 150, 0, 0, buff.getWidth(), buff.getHeight(), null)) {
if (runnable == false) {
System.out.println("Paused ..... ");
this.wait();
}
}
} catch (Exception ex) {
System.out.println("Error");
}
}
}
}
}
}

最佳答案

Object Detection using Haar feature-based cascade classifiers 是 Paul Viola 和 Michael Jones 在 2001 年的论文“Rapid Object Detection using a Boosted Cascade of Simple Features”中提出的一种有效的目标检测方法。它是一种基于机器学习的方法从大量正面和负面图像中训练级联函数的方法。然后用于检测其他图像中的对象。

OpenCV 已经包含许多预训练的面部、眼睛、微笑等分类器。这些 XML 文件存储在 opencv/data/haarcascades/文件夹中。

您无法同时运行多个级联文件并提高性能。但是您可以将它们一个一个地用作循环,并通过该循环传递输入图像。

示例代码在此链接中给出:OpenCv sample code

关于java - 如何使用 OpenCV 在同一个 Java 程序中运行多个 haarcascade xml 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40274310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com