[python] 5

Viewer

  1. import cv2
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4.  
  5. # Baca gambar dan ubah ke grayscale
  6. = cv2.imread('y.png', cv2.IMREAD_GRAYSCALE)
  7.  
  8. # Operator Roberts
  9. Rx = np.array([[1,0], [0,-1]])
  10. Ry = np.array([[0,1], [-1,0]])
  11.  
  12. # Deteksi tepi
  13. Jx = cv2.filter2D(I, -1, Rx)
  14. Jy = cv2.filter2D(I, -1, Ry)
  15.  
  16. # Magnitudo gradien
  17. Jedge = np.sqrt(Jx**2 + Jy**2)
  18.  
  19. # Segmentasi menggunakan thresholding
  20. threshold_value = 2 # Atur threshold sesuai kebutuhan
  21. segmented_image = np.where(Jedge > threshold_value, 0, 255).astype(np.uint8)  # Inversi threshold
  22.  
  23. # Temukan kontur untuk segmentasi berbasis wilayah
  24. contours, _ = cv2.findContours(segmented_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
  25.  
  26. # Mewarnai setiap wilayah dengan warna yang unik
  27. segmented_color = cv2.cvtColor(np.zeros_like(I), cv2.COLOR_GRAY2BGR)
  28. for i, contour in enumerate(contours):
  29.     color = tuple(np.random.randint(0, 255, (3,)).tolist())  # Ubah ndarray ke tuple
  30.     cv2.drawContours(segmented_color, [contour], -1, color, -1)
  31.  
  32. # Tampilkan gambar
  33. plt.subplot(1, 3, 1)
  34. plt.imshow(cv2.cvtColor(I, cv2.COLOR_BGR2RGB))
  35. plt.title('Original Image')
  36.  
  37. plt.subplot(1, 3, 2)
  38. plt.imshow(Jedge, cmap='gray')
  39. plt.title('Edge Detection Result')
  40.  
  41. plt.subplot(1, 3, 3)
  42. plt.imshow(cv2.cvtColor(segmented_color, cv2.COLOR_BGR2RGB))
  43. plt.title('Segmentation Result')
  44.  
  45. plt.show()
  46.  

Editor

You can edit this paste and save as new:


File Description
  • 5
  • Paste Code
  • 16 May-2024
  • 1.34 Kb
You can Share it: