打开CV 3.0.0面部检测detectMultiScale失败 [英] Open CV 3.0.0 face detection detectMultiScale fails

查看:536
本文介绍了打开CV 3.0.0面部检测detectMultiScale失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为什么我要让开放式简历的人脸检测示例正常工作. 第一个问题在这里得到解决: opencv-3-0-0-facedetect-sample -失败

Hy i am trying to get the facedetection sample of open cv to work. The first problem was solfed here: opencv-3-0-0-facedetect-sample-fails

我的代码现在看起来像这样:

My Code now looks like this:

package org.maxbit.opencv.samples;

import java.awt.image.ImageProducer;

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;

//
// Detects faces in an image, draws boxes around them, and writes the results
// to "faceDetection.png".
//
class DetectFaceDemo {
  public void run() {
    System.out.println("\nRunning DetectFaceDemo");

    // Create a face detector from the cascade file in the resources
    // directory.
    CascadeClassifier faceDetector = new CascadeClassifier();
//    System.out.println(getClass().getResource("libpcascade_frontalface.xml").getPath());
    if(!faceDetector.load("D:/lbpcascade_frontalface.xml"))
        System.out.println("ldpcascade_frontalface.xml not found!");
    System.out.println("Loading analyse method Done!");
    Mat image = Imgcodecs.imread("D:/lena.png");

    // Detect faces in the image.
    // MatOfRect is a special container class for Rect.
    MatOfRect faceDetections = new MatOfRect();
    faceDetector.detectMultiScale(image, faceDetections);

    System.out.println(String.format("Detected %s faces", faceDetections.toArray().length));

    // Draw a bounding box around each face.
    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(255, 0, 0));
    }

    // Save the visualized detection.
    String filename = "faceDetection.png";
    System.out.println(String.format("Writing %s", filename));
    Imgcodecs.imwrite(filename, image);
  }
}

public class SampleB {
  public static void main(String[] args) {
    System.out.println("Hello, OpenCV "+Core.NATIVE_LIBRARY_NAME);

    // Load the native library.
    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    new DetectFaceDemo().run();
  }
}

当我开始此操作时,我得到以下错误:

When i start this i get the following erreor:

OpenCV Error: Assertion failed (clEnqueueReadBuffer(q, (cl_mem)u->handle, CL_TRUE, 0, u->size, alignedPtr.getAlignedPtr(), 0, 0, 0) == CL_SUCCESS) in cv::ocl::OpenCLAllocator::map, file ..\..\..\..\opencv\modules\core\src\ocl.cpp, line 3961
Exception in thread "main" CvException [org.opencv.core.CvException: cv::Exception: ..\..\..\..\opencv\modules\core\src\ocl.cpp:3961: error: (-215) clEnqueueReadBuffer(q, (cl_mem)u->handle, CL_TRUE, 0, u->size, alignedPtr.getAlignedPtr(), 0, 0, 0) == CL_SUCCESS in function cv::ocl::OpenCLAllocator::map
]
    at org.opencv.objdetect.CascadeClassifier.detectMultiScale_1(Native Method)
    at org.opencv.objdetect.CascadeClassifier.detectMultiScale(CascadeClassifier.java:176)
    at org.maxbit.opencv.samples.DetectFaceDemo.run(SampleB.java:35)
    at org.maxbit.opencv.samples.SampleB.main(SampleB.java:57)

它指向此代码行

推荐答案

我知道这是一篇旧文章,但是我可以通过不同地设置文件路径来解决此问题.我使用以下内容修复了文件路径,我只是将其添加到了下一行,并且它可以正常工作,当然应该对代码进行更好的清理

I know this is an old post, but I was able to work around this by setting the file paths differently. I used the following to fix the file path, I just added it on the next line and it works, of course the code should be cleaned a little better

faceDetector.load("C:\\workspace\\OpenCV_Starting\\bin\\main\\resources\\lbpcascade_frontalface.xml");

(当然C:\ Workspace \东西是我的电脑,所以请适当更改!)

(of course the C:\Workspace\ stuff is my computer, so change appropriately!)

这篇关于打开CV 3.0.0面部检测detectMultiScale失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆