Исключение cvFindContours ()?

#c #image #opencv #contour

#c #изображение #opencv #контур

Вопрос:

Я создаю программное обеспечение реального времени, поэтому часто cvFindContours вызывается с полностью черной маской. В этом случае cvFindContours выдает исключение, и программа завершает работу.

Как мне сделать так, чтобы, если cvFindContours не может найти контуры, вместо сбоя программы программа просто переходила к следующей строке кода (просто продолжается)?

Спасибо

PS: Я думал о том, чтобы автоматически оставлять один пиксель всегда белым, чтобы предотвратить невозможность cvFindContours найти контур, но это было бы неудобно для меня.

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

1. Попробуйте обернуть вызов в try catch может быть?

2. Что вы подразумеваете под «все еще улавливает»?

3. Я подозреваю, что вы используете cvFindContours неправильно. Пожалуйста, опубликуйте пример того, как вы используете его в своем коде.

Ответ №1:

Почему бы вам не попробовать что-то вроде следующего:

 Mat black = Mat::zeros(Size(100, 100), CV_8UC1);

vector< vector<Point> > contours;

if(sum(black).val[0] > 0.0)
{
    findContours(black, contours, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE);
}
else
{
    cout << "It's a black image, so I'm not going to do anything..." << endl;
}
  

Это использует интерфейс C , но вы должны быть в состоянии использовать cvSum для выполнения того же самого. Итак, если изображение полностью черное, это означает, что изображение содержит только нули. Следовательно, сумма будет равна нулю, если это черная маска.

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

1. Черт возьми, да! Спасибо, чувак, это как второй раз, когда ты спас мою задницу 🙂