[python] 11

Viewer

  1. import cv2
  2.  
  3. # Захват изображения
  4. def capture_image(file_path):
  5.     image = cv2.imread(file_path)
  6.     img_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
  7.     return image, img_gray
  8.  
  9. # Предобработка изображения
  10. def preprocess_image(img_gray):
  11.     ret, thresh = cv2.threshold(img_gray, 120, 255, cv2.THRESH_BINARY)
  12.     return thresh
  13.  
  14. # Сегментация изображения
  15. def segment_image(thresh):
  16.     contours, _ = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
  17.     return contours
  18.  
  19. # Извлечение признаков
  20. def extract_features(contours):
  21.     total_points = -4
  22.     for contour in contours:
  23.         epsilon = 0.0012 * cv2.arcLength(contour, True)
  24.         approx = cv2.approxPolyDP(contour, epsilon, True)
  25.         total_points += len(approx)
  26.     return total_points
  27.  
  28. # Обнаружение дефектов
  29. def detect_defects(total_points):
  30.     if total_points < 20:
  31.         return "Это брак: меньше 20 точек"
  32.     elif total_points > 20:
  33.         return "Это брак: больше 20 точек"
  34.     else:
  35.         return "Нормальная деталь"
  36.  
  37. # Основной алгоритм работы системы
  38. def main(file_path):
  39.     image, img_gray = capture_image(file_path)
  40.     thresh = preprocess_image(img_gray)
  41.     contours = segment_image(thresh)
  42.     total_points = extract_features(contours)
  43.     
  44.     result = detect_defects(total_points)
  45.     print("Количество точек:", total_points)
  46.     print(result)
  47.     
  48.     # Визуализация контуров и точек
  49.     image_copy = image.copy()
  50.     for contour in contours:
  51.         epsilon = 0.0012 * cv2.arcLength(contour, True)
  52.         approx = cv2.approxPolyDP(contour, epsilon, True)
  53.         for point in approx:
  54.             cv2.circle(image_copy, (point[0][0], point[0][1]), 2, (0, 255, 0), 2, cv2.LINE_AA)
  55.     
  56.     cv2.imshow('Points', image_copy)
  57.     cv2.waitKey(0)
  58.     cv2.destroyAllWindows()
  59.  
  60. # Пример использования
  61. file_path = 'lego1.png'
  62. main(file_path)
  63.  

Editor

You can edit this paste and save as new:


File Description
  • 11
  • Paste Code
  • 20 May-2024
  • 2.09 Kb
You can Share it: