I have the following code:
vector <Rect> detectAndDisplay(Mat frame) {
Mat frame_gray;
vector <Rect> detected;
//load the cascade
if (!cascade.load(CASCADE_NAME)) {
printf("--(!)Error loading Cascade\n");
std::exit(0);
};
// 2. Perform Viola-Jones Object Detection
cascade.detectMultiScale(frame_gray, detected, 1.1, 1, 0 | CV_HAAR_SCALE_IMAGE, Size(50, 50), Size(500, 500));
// 2.5 Merge overlapping rectangles
groupRectangles(detected, 1, 0.8);
std::vector <Rect> singles;
std::vector <Rect> overlaps;
for (auto rect_1: detected) {
bool isSingle = false;
for (auto rect_2: detected) {
if (rect_1 == rect_2) {
continue;
}
bool intersects = ((rect_1 & rect_2).area() > 0);
if (intersects) {
isSingle = false;
break;
}
}
if (isSingle) {
singles.push_back(std::move(rect_1)); //MOVING
} else {
overlaps.push_back(std::move(rect_1));
}
}
// 4. Draw box around faces found
for (int i = 0; i < detected.size(); i++) {
rectangle(frame, Point(detected[i].x, detected[i].y),
Point(detected[i].x + detected[i].width, detected[i].y + detected[i].height),
Scalar(0, 255, 0), 2);
}
return detected;
}
When I compile and run, step 4 works fine. My question is, why? I have moved its content into two different vectors. As such I was expecting to hit a segfault or something.