Как сделать исключение или (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();
}