Использование морфологии, как упоминалось в Cryckx, хорошо, но вы также можете использовать Преобразование расстояния , которое ослабит тонкие части (например, сказку), так что его можно будет легко разрезать. Вот результат, который я получил (я обрезал изображение только для лучшей визуализации):
Код OpenCV C ++:
Mat im1 = imread("E:/1/2.jpg", 0);
Mat im2, im3;
threshold(im1, im2, 250, 255, THRESH_OTSU);
imshow("Initial Thresholding", im2);
Mat dist;
distanceTransform(im2, dist, DIST_L2, 3);
normalize(dist, dist, 0, 255.0, NORM_MINMAX);
dist.convertTo(dist, CV_8U);
imshow("Distance Transform Image", dist);
Mat mask1, mask2, mask3;
threshold(dist, mask1, 50, 255,THRESH_BINARY); // A suitable threshold to cut the weak tale
dilate(mask1, mask1, Mat::ones(9,9, CV_8U));
imshow("Threshold on Distance Transform", mask1);
bitwise_and(im2, mask1, mask2);
imshow("mouse", mask2);
subtract(im2, mask2, mask3);
imshow("tale", mask3);
waitKey(0);