Рисование контуров при удалении небольших областей

0

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

    cv::findContours(fgmask,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_NONE);
    cv::drawContours(fgimg,contours,-1,cv::Scalar(0,0,255),2);

Я нашел следующий код онлайн, чтобы удалить небольшие незначительные области.

cv::findContours(fgmask,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_NONE);
    for(int i=0;i<contours.size();i++)
    {

                    if(contours[i].size() < 10000 && contours[i].size() > 0)
            {

            int size=cv::contourArea(contours[i]);
            if(size>5000)
            {
                            //Draw contour
                            vector<vector<Point> > tcontours;
                            tcontours.push_back(contours[i]);
                            cv::drawContours(fgimg,tcontours,-1,cv::Scalar(0,0,255),2);
                            }
                            }
            }

Но он вообще не рисует никаких контуров. Я положил инструкцию cout после инструкции if (size> 5000), чтобы убедиться, что это утверждение когда-либо сбылось, и я получил выход Cout. Итак, почему нет контуров? Есть ли какая-то проблема с функцией push_back или что?

Теги:
opencv
drawing
contour
webcam

1 ответ

0
  1. Вы действительно хотите использовать CV_RETR_EXTERNAL?
  2. if(contours[i].size() < 10000 && contours[i].size() > 0) бесполезны здесь
  3. Временной векторный vector<vector<Point> > tcontours; не имеет никакого смысла ни

Пытаться:

vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
findContours(fgmask, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_NONE);

// draw contours:   
Mat newImg = Mat::zeros(fgmask.size(), CV_8UC3);
for (unsigned int i = 0; i < contours.size(); i++)
{
    if (contourArea(contours[i]) > 5000)
        drawContours(newImg, contours, i, Scalar(0,0,255), 1, 8, hierarchy, 0);
}
  • 0
    Когда я использую ваш код, drawContours с i в качестве 3-го аргумента дает необработанное исключение. Ошибка: утверждение не выполнено (0 <= contourIdx && contourIdx <(int) last) в неизвестной функции, файл contours.cpp, строка 1810
  • 0
    @vatsalasharma: нет способа, которым этот код предоставил бы i что было бы из 0; contours.size() Интервал 0; contours.size() .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню