如何在Python中使用OpenCV獲取圖像分塊的邊界頂點?

如何在Python中使用OpenCV獲取圖像分塊的邊界頂點?

圖像分割后,精準定位每個區(qū)塊的邊界點對于后續(xù)圖像分析至關重要。本文將介紹一種使用pythonopencv高效實現(xiàn)此功能的方法。假設您已完成圖像分割,并將每個區(qū)塊用唯一數(shù)值標記(例如,從1開始遞增)。

首先,我們需要明確“邊界點”的定義:邊界點是區(qū)塊與相鄰區(qū)塊接觸的邊緣點。 假設圖像被分割成一個h×w的網(wǎng)格。

以下步驟演示如何使用OpenCV查找這些邊界點:

  1. 圖像讀取與預處理: 首先,讀取圖像并將其轉(zhuǎn)換為灰度圖像。

    立即學習Python免費學習筆記(深入)”;

    import cv2 import numpy as np  # 讀取圖像 img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
  2. 圖像分割 (假設已完成): 假設您已有一個標記了每個區(qū)塊的圖像 segmented_img,其中每個像素的值代表其所屬的區(qū)塊編號。 以下是一個示例:

    # 示例:假設已完成圖像分割 segmented_img = np.random.randint(1, 4, size=img.shape)  # 替換為您的實際分割結(jié)果
  3. 邊界點檢測: 通過遍歷每個像素及其鄰域,判斷是否為邊界點。

    def find_boundary_points(segmented_img):     height, width = segmented_img.shape     boundary_points = {}      for i in range(height):         for j in range(width):             current_label = segmented_img[i, j]             if current_label not in boundary_points:                 boundary_points[current_label] = []              for di, dj in [(-1, 0), (1, 0), (0, -1), (0, 1)]:  # 檢查上下左右                 ni, nj = i + di, j + dj                 if 0 <= ni < height and 0 <= nj < width and segmented_img[ni, nj] != current_label:                     boundary_points[current_label].append((j, i)) # 注意:OpenCV坐標系是(x,y)                     break # 找到一個不同的鄰域點即可標記為邊界點      return boundary_points
  4. 結(jié)果可視化: 將邊界點標記在原始圖像上。

    boundary_points = find_boundary_points(segmented_img) result_img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)  for label, points in boundary_points.items():     color = (np.random.randint(0, 256), np.random.randint(0, 256), np.random.randint(0, 256))     for point in points:         cv2.circle(result_img, point, 2, color, -1)  cv2.imshow('Boundary Points', result_img) cv2.waitKey(0) cv2.destroyAllwindows()

這段代碼提供了一種清晰、高效的方法來識別圖像分塊的邊界點。 請記住將示例 segmented_img 替換為您實際的圖像分割結(jié)果。 該方法易于理解和修改,適用于各種圖像處理任務。

? 版權聲明
THE END
喜歡就支持一下吧
點贊14 分享