You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							72 lines
						
					
					
						
							1.8 KiB
						
					
					
				
			
		
		
	
	
							72 lines
						
					
					
						
							1.8 KiB
						
					
					
				| import os
 | |
| import sys
 | |
| import cv2
 | |
| import numpy as np
 | |
| import random as rng
 | |
| 
 | |
| 
 | |
| def main():
 | |
| 
 | |
|         img = cv2.imread('./image-se.jpg')
 | |
| 
 | |
|         src = img
 | |
| 
 | |
|         img[np.all(img == 255, axis=2)] = 0
 | |
| 
 | |
|         kernel = np.array([[1, 1, 1], [1, -8, 1], [1, 1, 1]], dtype=np.float32)
 | |
| 
 | |
|         Laplacian = cv2.filter2D(img, cv2.CV_32F, kernel)
 | |
| 
 | |
|         imgres = np.float32(img) - Laplacian
 | |
| 
 | |
|         imgres = np.clip(imgres, 0, 255)
 | |
| 
 | |
|         imgres = np.uint8(imgres)
 | |
| 
 | |
|         bw = cv2.cvtColor(imgres, cv2.COLOR_BGR2GRAY)
 | |
| 
 | |
|         _, bw = cv2.threshold(bw, 40, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
 | |
| 
 | |
|         dist = cv2.distanceTransform(bw, cv2.DIST_L2, 3)
 | |
| 
 | |
|         cv2.normalize(dist, dist, 0, 1.0, cv2.NORM_MINMAX)
 | |
| 
 | |
|         _, dist = cv2.threshold(dist, 0.4, 1.0, cv2.THRESH_BINARY)
 | |
| 
 | |
|         kernel1 = np.ones((3, 3), dtype=np.uint8)
 | |
| 
 | |
|         dist = cv2.dilate(dist, kernel1)
 | |
| 
 | |
|         dist_8u = dist.astype('uint8')
 | |
| 
 | |
|         contours, _ = cv2.findContours(dist_8u, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
 | |
| 
 | |
|         markers = np.zeros(dist.shape, dtype=np.int32)
 | |
| 
 | |
|         for i in range(len(contours)):
 | |
|             cv2.drawContours(markers, contours, i, (i + 1), -1)
 | |
| 
 | |
|         cv2.circle(markers, (5, 5), 3, (255, 255, 255), -1)
 | |
| 
 | |
|         cv2.watershed(imgres, markers)
 | |
| 
 | |
|         mark = markers.astype('uint8')
 | |
| 
 | |
|         colors = []
 | |
| 
 | |
|         for conlour in contours:
 | |
|             colors.append((rng.randint(0, 256), rng.randint(0, 256), rng.randint(0, 256)))
 | |
| 
 | |
|         dst = np.zeros((markers.shape[0], markers.shape[1], 3), dtype=np.uint8)
 | |
| 
 | |
|         for i in range(markers.shape[0]):
 | |
|             for j in range(markers.shape[1]):
 | |
|                 index = markers[i, j]
 | |
|                 if index > 0 and index <= len(contours):
 | |
|                     dst[i, j, :] = colors[index - 1]
 | |
| 
 | |
|         img = np.hstack([src, dst])
 | |
| 
 | |
|         cv2.imshow('Final Result', img)
 | |
| 
 | |
|         cv2.waitKey(0) |