Я работаю над кодом обнаружения толпы C++ с «OpenCV», который берет 2 кадра и вычитает их. Затем сравните результат с порогом.
Я впервые имею дело с «OpenCV» для C++, и у меня мало информации об этом.
Это шаги кода:
- Возьмите два видеокадра с интервалом в α минут.
- Преобразование кадров в черно-белые изображения.
- Вычтите два кадра.
- Сравните разницу с порогом.
- Если разница ‹= пороговое значение, то толпа обнаружена иначе --> толпы нет.
код С++:
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main (int argc, const char * argv[])
{
//first frame.
Mat current_frame = imread("image1.jpg",CV_LOAD_IMAGE_GRAYSCALE);
//secunde frame.
Mat previous_frame = imread("image2.jpg",CV_LOAD_IMAGE_GRAYSCALE);
//Minus the current frame from the previous_frame and store the result.
Mat result = current_frame-previous_frame;
//compare the difference with threshold, if the deference <70 -> there is crowd.
//if it is > 70 there is no crowd
int threshold= cv::threshold(result,result,0,70,CV_THRESH_BINARY);
if (threshold==0) {
cout<< "crowd detected \n";
}
else {
cout<<" no crowd detected \n ";
}
}
Проблема в следующем: порог всегда равен нулю! и вывод всегда: обнаружена толпа, даже если толпы нет
Нас не волнует выходное изображение, потому что мы не будем его использовать, и мы просто хотим знать последнее значение порога.
Моя цель - узнать, насколько велика разница между двумя кадрами. Я хочу сравнить уважение с порогом, чтобы обнаружить человеческую толпу в определенном месте.
Я надеюсь, что один из вас может мне помочь
Спасибо