Утверждение функции AccuulateWeighted терпит неудачу в OpenCV

Используя OpenCv с C ++, я пытаюсь выполнить скользящее среднее для кадров видео, чтобы извлечь передний план. Но я не могу выяснить, что не так с accumulateWeighted функция. Программа перестает работать, когда дело доходит до этой функции, выдавая эту ошибку:

Необработанное исключение в 0x753b9617 в test.exe: Microsoft C ++ исключение: cv :: Исключение в ячейке памяти 0x0017f0d4 ..

Согласно документации OpenCV, я вижу, что SRC, как 1- или 3-канальный, должен иметь 8-битную или 32-битную плавающую точку. И DST с тем же количеством каналов, что и у изображения SRC, должен быть 32-битным или 64-битным с плавающей точкой:

void accumulateWeighted(InputArray src, InputOutputArray dst, double alpha, InputArray mask=noArray())

Так что я использовал CV_32F для них обоих. Я делаю это неправильно? Вот мой код:

#include <iostream> // for standard I/O
#include <string>   // for strings
#include "stdafx.h"#include <opencv.hpp>

#ifdef _DEBUG
#pragma comment (lib, "opencv_highgui2410d.lib")
#pragma comment (lib, "opencv_imgproc2410d.lib")
#pragma comment (lib, "opencv_core2410d.lib")
#else
#pragma comment (lib, "opencv_highgui2410.lib")
#pragma comment (lib, "opencv_imgproc2410.lib")
#pragma comment (lib, "opencv_core2410.lib")
#endif

using namespace std;
using namespace cv;

int main(int argc, char* argv[])
{
//// Step 1 : Get ready to Capture Video

VideoCapture cap("768x576.avi"); // open the video

if (!cap.isOpened())  // if not success, exit program
{
cout << "Cannot open the video cam" << endl;
return -1;
}

//// Step 2 : Find video frame size

double dWidth = cap.get(CV_CAP_PROP_FRAME_WIDTH); //get the width of frames of the video
double dHeight = cap.get(CV_CAP_PROP_FRAME_HEIGHT); //get the height of          frames of the video

//// Step 3 : Running Average

Mat sum=Mat::zeros(dHeight,dWidth,CV_32FC3);
for (int iii=0;iii<100;iii++)  // for 100 frames
{
Mat frame_rgb,floatimg;

bool bSuccess = cap.read(frame_rgb); // read a new frame from video

if (!bSuccess) //if not success, break loop
{
cout << "Cannot read a frame from video stream" << endl;
break;
}

frame_rgb.convertTo(floatimg, CV_32FC3);

accumulateWeighted(floatimg,sum,0.03,NULL);
}

cap.release();

return 0;
}

0

Решение

Может быть, попытаться удалить NULL в конце? Значение по умолчанию noArray () в сигнатуре about отличается от NULL.

1

Другие решения


По вопросам рекламы [email protected]