Как сделать исключение или (XOR) для пустых функций в openCV C++?

У меня есть проект, который обнаруживает обнаружение головы с помощью CascadeClassifer и отслеживание с помощью Tracker lib в openCV. Как сделать исключительную или (XOR) пустую функцию? потому что я отделил обнаружение от отслеживания с помощью функции void. как это сделать, он обнаружит голову, затем начнет отслеживать, и если он начнет отслеживать, обнаружение прекратится?

1 ответ

Решение

Если вы используете void CascadeClassifier::detectMultiScale(const Mat& image, vector<Rect>& objects, double scaleFactor=1.1, int minNeighbors=3, int flags=0, Size minSize=Size(), Size maxSize=Size()) чтобы найти объекты на изображении, вам не нужно XOR для значения void. Результат обнаружения находится в vector<Rect>& objects, Обнаружение прошло успешно, если вектор содержит прямоугольники. Если что-то обнаружено, то вы хотите, чтобы обнаружение прекратилось, и результат должен быть отслежен. Делать XOR как if(detection^tracking) не поможет тебе, потому что

  • вам все равно нужно вычислить обнаружение (чтобы получить результат для сравнения)
  • Вы не знаете, следует ли проводить обнаружение или отслеживание, потому что это будет так или иначе.

Я предлагаю добавить логическую переменную bool foundRectangle к вашему классу, который переключается между истиной и ложью. Значение false, если вам необходимо обнаружение, и значение true, если при обнаружении обнаружен хотя бы один прямоугольник, который следует отслеживать.

if(foundRectangle){
    //track();
}
else {
    //detect();
}
Другие вопросы по тегам