Я хочу нарисовать контур вокруг моей руки в прямом эфире веб-камеры. 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 или что?
CV_RETR_EXTERNAL
?if(contours[i].size() < 10000 && contours[i].size() > 0)
бесполезны здесь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);
}
i
что было бы из0; contours.size()
Интервал0; contours.size()
.