目錄
最新 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. 如何處理偵測不到圓形的情況?
如果偵測不到圓形,可以嘗試調整 param1
和 param2
的值,或增加圖像的對比度以改善邊緣檢測效果。
3. 是否可以使用其他方法進行直線和圓形偵測?
除了 Hough 變換,還可以使用深度學習方法來進行形狀偵測,這通常能提供更高的準確性和穩定性。
—