I (üniforma bölgeleri bulmak için) bir resmin hatlarını ayırmak için çalışıyorum bu yüzden o, cvCanny ve ardından cvFindContours uygulanan ben 1 kontur ben anahtar bir basın her zaman çizmek için şu kodu kullanın:OpenCV'de nasıl konturlar (ve bunları doldurulur) alınır?
for(; contours2 != 0; contours2 = contours2->h_next){
cvSet(img6, cvScalar(0,0,0));
CvScalar color = CV_RGB(rand()&255, rand()&255, rand()&255);
cvDrawContours(img6, contours2, color, cvScalarAll(255), 100);
//cvFillConvexPoly(img6,(CvPoint *)contours2,sizeof (contours2),color);
area=cvContourArea(contours2);
cvShowImage("3",img6);
printf(" %d", area);
cvWaitKey();
}
Ancak, ilk yinelemede TÜM konturları çizer, ikincisinde TÜMÜ çeker, bir tanesini çizer, üçüncüsü iki çeker, vs. Ben ekranın en doldurur cvFillConvexPoly işlevini kullanırsanız
Ve Yani
(Bu yazdığım gibi ben bir dışbükey çokgen benim için işe yaramaz fark rağmen, ben kontur insideof sadece doldurmak gerekir) , kalan tüm konturlar yerine, her iterasyonda sadece 1 kontur nasıl alabilirim?
Teşekkürler.
Çok teşekkürler, öyleydi, bu parametreyi fark etmemiştim. Şimdi sadece onları doldurmam gerekiyor, bunun için herhangi bir işlev var mı? Eğer değilse, nasıl gidebilirim? Belki de havza kapalı olanlar için çalışabilir, ancak bazen açık hatlar da vardır. –
Kalınlık parametresi için negatif bir değer kullanın. Bu sizin için işe yaramıyorsa, belki bunlardan biri yardımcı olacaktır: http://stackoverflow.com/questions/12929197/opencv-closing-a-shape-and-filling-it, http://stackoverflow.com/ question/1716274/fill-the-holes-in-opencv – maditya
Tekrar teşekkürler, Negatif bir kalınlık kullanmak hileyi mükemmel yapar. –