在累积加权时,OpenCV3断言失败

时间:2015-10-07 02:36:37

标签: c++ opencv opencv3.0

我尝试制作平均背景但有些不对劲,因为它会让应用程序崩溃

cv::Mat firstFrame;
cv::Mat averageBackground;
int frameCounter=0;

// this function is called for every frame of the camera
- (void)processImage:(Mat&)image; {

    cv::Mat diffFrame;
    cv::Mat currentFrame;
    cv::Mat colourCopy;

    cvtColor(image, currentFrame, COLOR_BGR2GRAY);

    averageBackground = cv::Mat::zeros(image.size(), CV_32FC3); 
    cv::accumulateWeighted(currentFrame, averageBackground, 0.01);


    cvtColor(image, colourCopy, COLOR_BGR2RGB);

我在崩溃日志中看到

OpenCV Error: Assertion failed (_src.sameSize(_dst) && dcn == scn) in accumulateWeighted, file /Volumes/Linux/builds/precommit_ios/opencv/modules/imgproc/src/accum.cpp, line 1108

libc++abi.dylib: terminating with uncaught exception of type cv::Exception: /Volumes/Linux/builds/precommit_ios/opencv/modules/imgproc/src/accum.cpp:1108: error: (-215) _src.sameSize(_dst) && dcn == scn in function accumulateWeighted

1 个答案:

答案 0 :(得分:0)

cv::accumulateWeighted中,输入和输出图像必须具有相同数量的通道。在您的情况下,currentFrame只有一个频道,因为您之前使用COLOR_BGR2GRAYaverageBackground有三个频道。

另外请注意averageBackground = cv::Mat::zeros(image.size(), CV_32FC3);,因为使用此行每次都会初始化结果图像(因此您要删除以前允许计算平均值的图像值)。您必须在程序开头或任何地方初始化此图像一次。