Hello,
i have a problem with the segmentation of a picture.
The background of this picture is kind of white and when i change everything to gray i have some similar gray values from the background and the objects and so I have problems with the threshhold. I’ve tried a lot, also with HSV, algorithms (watershed,…) and stuff like this. At the moment I am trying it with adaptive threshhold, afterwards I use a median filter and remove small white remaining points. So I have the best result so far.
But as you see do I have splitted contours.
Now I want to ask if its possible to merge these contours and fill it afterwards or if you have a good solution.
This is the code so far:
img = cv2.imread('ducks.jpg', 1)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# Addaptive Gauss Threshholding
thresh = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_MEAN_C,\
cv2.THRESH_BINARY_INV,11,3)
# median filter
median_blur= cv2.medianBlur(thresh, 5)
# Remove small white point
nlabels, labels, stats, centroids = cv2.connectedComponentsWithStats(median_blur, None, None, None, 8, cv2.CV_32S)
#get CC_STAT_AREA component as stats[label, COLUMN]
areas = stats[1:,cv2.CC_STAT_AREA]
result = np.zeros((labels.shape), np.uint8)
for i in range(0, nlabels - 1):
if areas[i] >= 100: #keep
result[labels == i + 1] = 255
cv2.imshow("Result", result)
cv2.waitKey(0)
cv2.destroyAllWindows()
I would be really glad for some help.