最新 Python OpenCV 直線與圓形偵測教學(2025版)

學習Python OpenCV中的直線偵測與圓形偵測

目錄

最新 Python OpenCV 直線與圓形偵測教學(2025版)

Python OpenCV 是一個功能強大的影像處理套件,能夠讓開發者輕鬆實現各種影像處理的應用,其中包括直線偵測與圓形偵測。本文將介紹如何使用 Python OpenCV 來進行這兩種偵測技術,並提供完整的實作範例及錯誤排除方法。

Python OpenCV 直線偵測

Python OpenCV 直線偵測是一種影像處理技術,用來偵測圖像中的直線。這項技術可以應用於許多場景,例如邊緣檢測和形狀識別。

Python OpenCV 直線偵測的基本原理是:對圖像中的每個像素進行掃描,如果某個像素的像素值與周圍像素的像素值有明顯差異,則該像素可能是直線的一部分。

Python OpenCV 直線偵測的基本步驟如下:

  • 讀取圖像:使用 cv2.imread() 函數讀取圖像。
  • 灰度轉換:使用 cv2.cvtColor() 將圖像轉換為灰度圖像。
  • 邊緣偵測:使用 cv2.Canny() 進行邊緣偵測。
  • 直線偵測:使用 cv2.HoughLines() 進行直線偵測。
  • 繪製直線:使用 cv2.line() 將偵測到的直線繪製到圖像上。

以下是更新後的 Python OpenCV 直線偵測程式碼範例:

import cv2
import numpy as np

# 讀取圖像
img = cv2.imread('image.jpg')

# 灰度轉換
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 邊緣偵測
edges = cv2.Canny(gray, 50, 150, apertureSize=3)

# 直線偵測
lines = cv2.HoughLines(edges, 1, np.pi / 180, 200)

# 繪製直線
if lines is not None:
    for line in lines:
        rho, theta = line[0]
        a = np.cos(theta)
        b = np.sin(theta)
        x0 = a * rho
        y0 = b * rho
        x1 = int(x0 + 1000 * (-b))
        y1 = int(y0 + 1000 * (a))
        x2 = int(x0 - 1000 * (-b))
        y2 = int(y0 - 1000 * (a))
        cv2.line(img, (x1, y1), (x2, y2), (0, 0, 255), 2)

# 顯示圖像
cv2.imshow('Detected Lines', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Python OpenCV 圓形偵測

Python OpenCV 圓形偵測是一種影像處理技術,用來偵測圖像中的圓形。它廣泛應用於物體識別和形狀分析。

Python OpenCV 圓形偵測的基本原理是:對圖像中的每個像素進行掃描,如果某個像素的像素值與周圍像素的像素值有明顯差異,則該像素可能是圓形的一部分。

Python OpenCV 圓形偵測的基本步驟如下:

  • 讀取圖像:使用 cv2.imread() 函數讀取圖像。
  • 灰度轉換:使用 cv2.cvtColor() 將圖像轉換為灰度圖像。
  • 邊緣偵測:使用 cv2.Canny() 進行邊緣偵測。
  • 圓形偵測:使用 cv2.HoughCircles() 進行圓形偵測。
  • 繪製圓形:使用 cv2.circle() 將偵測到的圓形繪製到圖像上。

以下是更新後的 Python OpenCV 圓形偵測程式碼範例:

import cv2
import numpy as np

# 讀取圖像
img = cv2.imread('image.jpg')

# 灰度轉換
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 邊緣偵測
edges = cv2.Canny(gray, 50, 150, apertureSize=3)

# 圓形偵測
circles = cv2.HoughCircles(edges, cv2.HOUGH_GRADIENT, 1, 20,
                             param1=50, param2=30, minRadius=0, maxRadius=0)

# 繪製圓形
if circles is not None:
    for i in circles[0, :]:
        cv2.circle(img, (i[0], i[1]), i[2], (0, 255, 0), 2)

# 顯示圖像
cv2.imshow('Detected Circles', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

綜上所述,Python OpenCV 提供了一系列的影像處理技術,讓開發者能夠輕鬆實現直線與圓形的偵測。本文介紹了如何使用 Python OpenCV 進行這兩種偵測技術,並提供了完整的程式碼範例。

Q&A(常見問題解答)

1. Python OpenCV 直線偵測的準確性如何提升?

可以通過調整 cv2.Canny() 函數的閾值來改善邊緣偵測的準確性,從而提升直線偵測的結果。

2. 如何處理偵測不到圓形的情況?

如果偵測不到圓形,可以嘗試調整 param1param2 的值,或增加圖像的對比度以改善邊緣檢測效果。

3. 是否可以使用其他方法進行直線和圓形偵測?

除了 Hough 變換,還可以使用深度學習方法來進行形狀偵測,這通常能提供更高的準確性和穩定性。

發佈留言