Я работаю над кодом обнаружения C ++ с помощью OpenCV, который берет 2 кадра и вычитает их. Затем сравните результат с порогом.
Это первый раз, когда я имею дело с «OpenCV» для C ++, и у меня мало информации об этом.
Это шаги кода:
код 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 ";
}
}
Проблема в :
Порог всегда будет нулевым!
и вывод всегда:
толпа обнаружена
даже если нет толпы
Мы не заботимся о выходном изображении, потому что мы не будем его использовать, и мы просто хотим знать последнее значение порога.
Моя цель — узнать, сколько различий между 2 кадрами. Я хочу сравнить почтение с порогом, чтобы обнаружить толпу людей в определенном месте
Я надеюсь, что один из вас может помочь мне
Спасибо
есть несколько недостатков в использовании порог функция
то, что вы, вероятно, хотели, это:
cv::threshold(result,result,70,1, CV_THRESH_BINARY); // same as : result = result>70;
int on_pixels = countNonZero(result);
// or:
int on_pixels = sum(result)[0];
[sidenote: если вы действительно хотите обнаружить человеческие толпы, вам придется положить гораздо больше пота в это. просто различные рамки подвержены ошибкам при изменении освещения, также есть птицы, машины и светофоры]
Других решений пока нет …