#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. Черт возьми, да! Спасибо, чувак, это как второй раз, когда ты спас мою задницу 🙂