1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
void Traitement :: Watershed (Image &image)
{
Mat gray, thresh, complement ;
cvtColor(image.getMat(), gray, COLOR_BGR2GRAY);
threshold(gray, thresh, 0, 255, THRESH_BINARY | THRESH_OTSU);
bitwise_not ( thresh, complement ); // image complement : inversion bits B&W
gray.release();
thresh.release();
// Traitement avant-plan
Mat foreground;
erode( complement, foreground, Mat(), Point(-1, -1), 2 ); //2
// Traitement arrière plan
Mat background, back;
dilate ( complement, background, Mat(), Point(-1, -1), 3 ); //3
complement.release();
threshold(background, back, 1, 128, 1);
background.release();
// Création des marqueurs
Mat markers ;
markers = foreground + back;
foreground.release();
back.release();
// Préparation watershed
Mat markers32, originale;
markers.convertTo(markers32, CV_32SC1);
image.getMat().convertTo(originale, CV_8UC3);
watershed(originale, markers32);
originale.release();
markers.release();
// Conversion résultat pour affichage
Mat result;
markers32.convertTo(result, CV_8U, 255, 255);
markers32.release();
image.setMat(result);
result.release();
image.addTraitement("Watershed");
} |