Advertisement
dan-masek

Untitled

May 14th, 2019
359
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.35 KB | None | 0 0
  1. import numpy as np
  2. import cv2
  3.  
  4. # START of original watershed example
  5. # from https://docs.opencv.org/3.4/d3/db4/tutorial_py_watershed.html
  6.  
  7. img = cv2.imread('water_coins.jpg')
  8. gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  9. ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)
  10.  
  11. # noise removal
  12. kernel = np.ones((3,3),np.uint8)
  13. opening = cv2.morphologyEx(thresh,cv2.MORPH_OPEN,kernel, iterations = 2)
  14. # sure background area
  15. sure_bg = cv2.dilate(opening,kernel,iterations=3)
  16. # Finding sure foreground area
  17. dist_transform = cv2.distanceTransform(opening,cv2.DIST_L2,5)
  18. ret, sure_fg = cv2.threshold(dist_transform,0.7*dist_transform.max(),255,0)
  19. # Finding unknown region
  20. sure_fg = np.uint8(sure_fg)
  21. unknown = cv2.subtract(sure_bg,sure_fg)
  22.  
  23. # Marker labelling
  24. marker_count, markers = cv2.connectedComponents(sure_fg)
  25. # Add one to all labels so that sure background is not 0, but 1
  26. markers = markers+1
  27. # Now, mark the region of unknown with zero
  28. markers[unknown==255] = 0
  29.  
  30. markers = cv2.watershed(img,markers)
  31.  
  32. # END of original watershed example
  33.  
  34. # Iterate over all non-background labels
  35. for i in range(2, marker_count + 1):
  36.     mask = np.uint8(np.where(markers==i, 255, 0))
  37.     x,y,w,h = cv2.boundingRect(mask)
  38.     area = cv2.countNonZero(mask)
  39.     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