Функция cvMatchTemplate () выдает ошибку сбоя утверждения? opencv

#opencv

#opencv

Вопрос:

Я пытаюсь выполнить отслеживание изображений с помощью cvMatchTemplate() , но я продолжаю получать ошибку с ошибкой утверждения -215. Я надеюсь, что кто-нибудь сможет разобраться в этом. Я убедился, что все переменные не равны нулю, а результаты и шаблоны имеют правильный размер. Я на opencv 2.2

     int ww = image->width - template->width   1;
    int hh = image->height - template->height   1;
    CvSize tempsize = cvSize(ww, hh);
    IplImage *results = cvCreateImage(tempsize,image->depth, image->nChannels);

    //set the roi
    cvSetImageROI(image, roiFace);
    cvMatchTemplate(image, template, results, CV_TM_SQDIFF_NORMED);
  

Вот ошибка:

 `OpenCV Error: Assertion failed (
result.size() == cv::Size(std::abs(img.cols - templ.cols)   1, std::abs(img.rows - templ.rows)   1) 

amp;amp; 
result.type() == CV_32F) in 

cvMatchTemplate, file /Volumes/ramdisk/opencv/OpenCV-2.2.0/modules/imgproc/src/templmatch.cpp, line 381
terminate called after throwing an instance of 'cv::Exception'


  what():  /Volumes/ramdisk/opencv/OpenCV-2.2.0/modules/imgproc/src/templmatch.cpp:381: error: (-215) result.size() == cv::Size(std::abs(img.cols - templ.cols)   1, std::abs(img.rows - templ.rows)   1) amp;amp; result.type() == CV_32F in function cvMatchTemplate`
  

Ответ №1:

Ширина и высота кажутся нормальными. Возможно, глубина неверна. Измените cvCreateImage строку на:

 IplImage *results = cvCreateImage(tempsize,IPL_DEPTH_32F, 1);
  

Комментарии:

1. Да, nChannel был неправильным и должен был быть равен 1, но я все еще получаю ту же ошибку

2. @ssj: вы тоже изменились IPL_DEPTH_32F ? Кроме того, вам, вероятно, нужно использовать размер ROI, а не размер изображения. Используйте roiFace.width вместо image->width и соответственно для высоты.

3. Бантар, ты прав, мне следовало использовать roi вместо полной ширины изображения.