2015-10-07 64 views
0

我儘量讓平均背景但蹊蹺的是因爲它的方式崩潰的應用程序OpenCV3斷言失敗上accumulateWeighted

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 

回答

0

cv::accumulateWeighted輸入和輸出圖像必須具有相同數量的頻道。在你的情況下,currentFrame只有一個頻道,因爲你之前做過COLOR_BGR2GRAY,而averageBackground有三個頻道。

也請注意averageBackground = cv::Mat::zeros(image.size(), CV_32FC3);,因爲使用這一行,您每次都初始化結果圖像(因此您正在刪除以前的圖像值,以便計算平均值)。您只能在程序開始或任何地方初始化該圖像一次。