Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- import cv2
- # START of original watershed example
- # from https://docs.opencv.org/3.4/d3/db4/tutorial_py_watershed.html
- img = cv2.imread('water_coins.jpg')
- gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
- ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)
- # noise removal
- kernel = np.ones((3,3),np.uint8)
- opening = cv2.morphologyEx(thresh,cv2.MORPH_OPEN,kernel, iterations = 2)
- # sure background area
- sure_bg = cv2.dilate(opening,kernel,iterations=3)
- # Finding sure foreground area
- dist_transform = cv2.distanceTransform(opening,cv2.DIST_L2,5)
- ret, sure_fg = cv2.threshold(dist_transform,0.7*dist_transform.max(),255,0)
- # Finding unknown region
- sure_fg = np.uint8(sure_fg)
- unknown = cv2.subtract(sure_bg,sure_fg)
- # Marker labelling
- marker_count, markers = cv2.connectedComponents(sure_fg)
- # Add one to all labels so that sure background is not 0, but 1
- markers = markers+1
- # Now, mark the region of unknown with zero
- markers[unknown==255] = 0
- markers = cv2.watershed(img,markers)
- # END of original watershed example
- # Iterate over all non-background labels
- for i in range(2, marker_count + 1):
- mask = np.uint8(np.where(markers==i, 255, 0))
- x,y,w,h = cv2.boundingRect(mask)
- area = cv2.countNonZero(mask)
- print "Label %d at (%d, %d) size (%d x %d) area %d pixels" % (i,x,y,w,h,area)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement