Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

my trained cascade.xml makes the call detectMultiScale(...) hangs

Hi, My environment:

  • Ubuntu Linux 17.04 Desktop 64bit
  • OpenCV 3.2.0

I have two cascades.

One is downloaded from internet -->cars3.xml

The other is trained by myself -->my trained cascade.xml

The tested picture is here currentFrame02.jpg

My opencv_traincascade command is as below:

opencv_traincascade -data classifier -vec data/positive_images/positives.vec -bg data/negative_images/negatives.txt -numStages 20 -w 100 -h 100 -mode BASIC -numPos 182 -numNeg 166 -featureType LBP

My code is as below:

#include <stdio.h>
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <iostream>

using namespace cv;
using namespace std;
int main() {
    Mat image;
    image = imread("/home/user/opencv_workspace/test_images/currentFrame02.jpg", CV_LOAD_IMAGE_COLOR);
    namedWindow("window1", 1);
    imshow("window1", image);
    waitKey(0);
    CascadeClassifier vehicle_cascade;
    //vehicle_cascade.load("/home/user/opencv_workspace/classifier/cars3.xml");
    vehicle_cascade.load("/home/user/opencv_workspace/classifier/cascade.xml");
    std::vector<Rect> vehicles;
    vehicle_cascade.detectMultiScale(image, vehicles); // hangs here when using cascade.xml
    cout << "find " << vehicles.size() << " vehicles"<< endl;
    for(int i = 0; i < vehicles.size(); i++) {
        Point center(vehicles[i].x + vehicles[i].width*0.5, vehicles[i].y + vehicles[i].height * 0.5);
        ellipse(image, center, Size(vehicles[i].width*0.5, vehicles[i].height* 0.5), 0, 0, 360, Scalar(255, 0, 255), 4, 8, 0);
    }
    imshow("Detected Vehicle", image);
    waitKey(0);
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

If I use the downloaded cars3.xml, the code can detect something and display the result.

However, if I use my trained cascade.xml, the code freezes at line

vehicle_cascade.detectMultiScale(image, vehicles);

Does anybody help me to solve the problem ? Many thanks