2015-08-01 2 views
2

Итак, я работаю с cvBlob и библиотекой вычитания фона. Когда я обрабатываю свой образ, и я получаю маску, я затем пытаюсь ее размыть и расширять.cv :: erode вызывает ошибку: OpenCV Ошибка: утверждение не выполнено (m.dims> = 2) в Mat

Я получаю сообщение об ошибке при попытке и подорве изображения. Здесь ошибка:

OpenCV Error: Assertion failed (m.dims >= 2) in Mat, file /home/opencv-3.0.0/modules/core/src/matrix.cpp, line 441 
terminate called after throwing an instance of 'cv::Exception' 
    what(): /home/opencv-3.0.0/modules/core/src/matrix.cpp:441: error: (-215) m.dims >= 2 in function Mat 

Aborted (core dumped) 

Вот мой код.

using namespace cv; 
using namespace std; 
int keyboard; //input from keyboard 

int main(int argc, char **argv) 
{ 
IBGS *bgs; 

BlobTracking* blobTracking; 
blobTracking = new BlobTracking(); 

bgs = new FrameDifferenceBGS; 

Mat img_input; 
Mat img_blob; 

//create the capture object 
VideoCapture capture(argv[1]); 

if(!capture.isOpened()){ 
    //error in opening the video input 
    cerr << "Unable to open video file: " << argv[1] << endl; 
    exit(EXIT_FAILURE); 
} 

//read input data. ESC or 'q' for quitting 
while((char)keyboard != 'q' && (char)keyboard != 27){ 
    //read the current frame 
    if(!capture.read(img_input)) { 
     cerr << "Unable to read next frame." << endl; 
     cerr << "Exiting..." << endl; 
     exit(EXIT_FAILURE); 
    } 

    cv::Mat img_mask; 
    cv::Mat img_bkgmodel; 

    // by default, it shows automatically the foreground mask image 
    bgs->process(img_input, img_mask, img_bkgmodel); 

    cv::Mat img_mask_erode_and_dilate; 
    int erosion_size=3; 

    cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT, 
              cv::Size(2*erosion_size + 1, 2*erosion_size+1), 
              cv::Point(erosion_size, erosion_size)); 

    // Erode the frame 
    cv::erode(img_mask, img_mask_erode_and_dilate, element); 

    // Dilate the frame 
    cv::dilate(img_mask, img_mask_erode_and_dilate, element); 

    // Show before and after dilate and erode 
    cv::imshow("Frame Before Erode or Dilate", img_mask); 
    cv::imshow("Frame AFTER Erode and Dilate", img_mask_erode_and_dilate 

    //get the input from the keyboard 
    keyboard = waitKey(30); 
} 

//delete capture object 
capture.release(); 

delete bgs; 

cvDestroyAllWindows(); 

return 0; 

}

Если я использую оригинальную рамку и не обработанные один, то все работает. Я подозреваю, что что-то происходит с изображением серой шкалы, которое возвращается алгоритмом вычитания фона

ответ

4

ошибка говорит вам, что ваше входное изображение имеет более одного канала. morph operatora вместо этого выполняются на бинарных изображениях маски, например. результат из-за канонической функции или порога изображения в оттенках серого.

поэтому, пожалуйста, проверьте свою маску ввода, что она содержит.

Смежные вопросы