Я обрабатываю видео, которое хочу обнаружить некоторые объекты.фильтрация нежелательных контуров - opencv с C++
Во-первых, я удаляю фон, затем делаю его серым и создаю двоичное изображение, используя cv::threshold
, а затем cv::findcontours
.
Я хочу удалить слишком длинные и слишком короткие контуры. Я нашел код по этой причине в «Поварной книге Opencv 2». Но у него есть ошибка времени выполнения на 21-м кадре моего видео.
// Eliminate too short or too long contours
size_t cmin{ 15 }; // minimum contour length
size_t cmax{ 120 }; // maximum contour length
std::vector<std::vector<cv::Point> >::
const_iterator itc = contours.begin();
while (itc != contours.end()) {
if (itc->size() < cmin || itc->size() > cmax)
itc = contours.erase(itc);
else
++itc;
}
Я искал и нашел еще один код и он имеет ту же самую ошибку на тот же кадр:
double min_area = 500; // area threshold
double max_area = 1500; // area threshold
for (int i = 0; i < contours.size(); i++) // iterate through each contour.
{
double area = contourArea(contours[i], false); // Find the area of contour
if (area < min_area || area > max_area)
contours.erase(contours.begin() + i);
}
и я написал код, чтобы создать новый вектор и просто скопировать принятые контуры в нем. но он также имеет ту же самую ошибку на том же кадре:
std::vector<std::vector<cv::Point> > goodcontours;
size_t cmin{ 15 };
size_t cmax{ 120 };
double contourlength = 1;
size_t contoursize = contours.size();
for (int i = 0; i != contoursize;i++) {
contourlength = cv::arcLength(contours[i], true);
if (contourlength > cmin && contourlength < cmax)
goodcontours.push_back(contours.at(i));
}
Я попробовал другие видео, и все из них имеет ту же проблему на определенном кадре.
Перед ошибкой, я все еще вижу нежелательные контуры, и это означает, что они действительно не устранены.
ошибка просто сказать:
Необработанное исключение в 0x75017FB2 (ucrtbase.dll)
Есть ли у вас какие-либо предложения для фильтрации контуров?
one of my video frames contours
Я ** угадывание **, что он должен делать с контур не соответствует 'contourArea 'предположения (слишком маленькие, возможно?). Должно быть более подробное информационное сообщение - смотрите внимательнее – slawekwin