Итак, чтобы попрактиковаться в C++, я пишу программу обнаружения движения, которая загружает фотографии в dropbox с помощью библиотеки OpenCV, проект, который я сделал прошлым летом в pyton, следуя этому руководству: https://www.pyimagesearch.com/2015/05/25/basic-motion-detection-and-tracking-with-python-and-opencv/
Этот участок кода запускается один раз, а затем выдает ошибку во втором цикле.
Это код:
Mat set_delta(Mat &average, Mat gray_frame)
{
Mat delta_frame;
if (average.empty()==1)
{
cout<<"gray frame depth: "<<gray_frame.depth();
gray_frame.convertTo(average, CV_32FC(gray_frame.channels()));
//Mat Acc(gray_frame.rows, gray_frame.cols,CV_32FC(gray_frame.channels()));
}
//cout<<"gray_frame average: "<< get_average(gray_frame)<<
// "\naverage_frame average: "<<get_average(average);
Mat Acc(average.rows, average.cols,CV_32FC(average.channels()));
cout<<"average depth: "<<average.depth()<<"\nAcc depth: "<<Acc.depth();
accumulateWeighted(gray_frame, average, .5);
convertScaleAbs(average, average);
absdiff(gray_frame,average,delta_frame);
return delta_frame;
}
Я получаю эту ошибку:
OpenCV Error: Assertion failed (func != 0) in accumulateWeighted, file /build/opencv/src/opencv-3.3.1/modules/imgproc/src/accum.cpp, line 635
terminate called after throwing an instance of 'cv::Exception'
what(): /build/opencv/src/opencv-3.3.1/modules/imgproc/src/accum.cpp:635: error: (-215) func != 0 in function accumulateWeighted
ошибка генерируется функцией аккумуляции Weighted, которую я пытался исправить, создав локальный массив Acc после прочтения этих страниц:
http://answers.opencv.org/question/63781/accumulateweighted-problems/< /а>
Утверждение не выполнено с accumulateWeighted в OpenCV
Мне нужно выяснить, почему это заканчивается на втором цикле. Я думаю, что это симантическая ошибка. код работает так, как написано, но мои инструкции на самом деле не то, что я намереваюсь/нужно делать.
немного возможно полезной информации:
Первоначально Acc был основан на Gray_frame, но я понял, что дизайн этого метода зависит от глобального среднего значения, в результате чего дельта-кадр имеет контур исходного кадра во всех последующих кадрах. Поэтому я пытаюсь переделать его, чтобы придерживаться среднего глобального значения.
Каналы на все 3 (gray_frame, средний и акк) один. Глубина серого кадра остается равной 0. Глубина для среднего сначала равна 5 (после оператора if), затем 0, тогда как глубина Acc остается равной 5. Похоже, что основной цикл выполняется один раз, а затем завершается.
единичное среднее значение среднего до накопления взвешенного второго цикла такое же, как среднее значение первого. около 97,89
Всю программу C++ (работа в процессе) можно найти здесь: https://github.com/skewballfox/SauronsEye/blob/master/SauronsEye.cpp
Моя работа прошлым летом, которую я отчасти использую в качестве руководства (это было в основном для меня, чтобы попрактиковаться и никогда не предназначалось для просмотра, поэтому это немного беспорядочно): https://github.com/skewballfox/opencv-practice/blob/master/pi_surveillance.py