Я пытаюсь нарисовать контуры вокруг больших двоичных объектов в двоичном изображении, однако иногда openCV рисует один контур вокруг двух различных больших двоичных объектов.Ниже приведен пример.Как я могу решить эту проблему?
Здесь следует нарисовать два ограничивающих прямоугольника для большого двоичного объекта справа и отдельно для одного левого.Я согласен, что они близко, но между ними достаточно расстояния.Я рисую только внешние контуры вместо дерева или списка.Я также использую cvFindNextContour (contourscanner), поскольку это проще для моего случая.
Спасибо
РЕДАКТИРОВАТЬ: Изображение, отображаемое в окне «Вывод» из другой функции, котораявычитание изображения.Изображение, отображаемое в окне «Контуры», находится в функции pplfind ().«выходное» изображение передается в img_con ().
IplImage* img_con(IplImage* image){
int ppl;
CvMemStorage* memstr = cvCreateMemStorage();
IplImage* edges = cvCreateImage(cvGetSize(image),8,1);
cvCanny(image,edges,130,255);
CvContourScanner cscan = cvStartFindContours(image,memstr,sizeof(CvContour),CV_RETR_EXTERNAL,CV_CHAIN_APPROX_NONE,cvPoint(0,0));</p>
<pre><code>ppl = pplfind(cscan,cvGetSize(image));
if (ppl !=0 )
printf("Estimated number of people: %d\n",ppl);
cvEndFindContours(&cscan);
cvClearMemStorage(memstr);
return edges;
}
int pplfind (CvContourScanner cscan, CvSize frSize) {ofstream file;полукокса [50];file.open ( "box.txt", ofstream :: приложение);int ppl = 0;CvSeq * c;IplImage * out = cvCreateImage (frSize, 8,3);while (c = cvFindNextContour (cscan)) {CvRect box = cvBoundingRect (c, 1);if ((box.height> int (box.width * 1.2)) && (box.height> 20)) {// && (box.width <20)) {// ppl ++;cvRectangle (out, cvPoint (box.x, box.y), cvPoint (box.x + box.width, box.y + box.height), CV_RGB (255,0,50), 1); </p>
cvShowImage("contours",out);
//cvWaitKey();
}
//printf("Box Height: %d , Box Width: %d ,People: %d\n",box.height,box.width,ppl);
//cvWaitKey(0);
int coord = sprintf_s(buff,"%d,%d,%d\n",box.width,box.height,ppl);
file.write(buff,coord);
}
file.close();
cvReleaseImage(&out);
return ppl;
}