8️⃣ OpenCV 與機器學習
🎯 OpenCV 如何與機器學習結合?
OpenCV 內建多種機器學習模型,適用於 影像分類、物件偵測、人臉辨識 等應用。
✅ 適用場景:
- 人臉偵測(Face Detection)
- 手寫數字辨識(MNIST)
- 影像分類(SVM、KNN、Decision Tree)
✅ OpenCV 人臉偵測(Haar Cascade)
Haar Cascade 是一種基於機器學習的 人臉偵測技術。
import cv2
# 載入 Haar Cascade 模型
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
# 讀取影像
image = cv2.imread("face.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 偵測人臉
faces = face_cascade.detectMultiScale(gray, 1.1, 4)
# 繪製人臉框
for (x, y, w, h) in faces:
cv2.rectangle(image, (x, y), (x + w, y + h), (255, 0, 0), 2)
cv2.imshow("Face Detection", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
✅ 這種方法適合即時應用,如監視系統與行動裝置人臉解鎖。
✅ SVM 影像分類(手寫數字辨識)
支持向量機(SVM)可用於影像分類,例如 MNIST 手寫數字辨識。
from sklearn import datasets, svm
import cv2
import numpy as np
# 載入 MNIST 手寫數字數據集
digits = datasets.load_digits()
X, y = digits.data, digits.target
# 訓練 SVM 模型
model = svm.SVC(gamma=0.001)
model.fit(X, y)
# 測試影像
sample = X[0].reshape(1, -1)
prediction = model.predict(sample)
print("預測結果:", prediction)
✅ 這種方法可用於影像分類與模式辨識。
✅ OpenCV KNN 物件分類
KNN(K-Nearest Neighbors)演算法可用於分類影像中的物件。
import cv2
import numpy as np
# 建立 KNN 模型
knn = cv2.ml.KNearest_create()
# 訓練數據(簡單示例)
train_data = np.array([[0,0],[0,1],[1,0],[1,1]], dtype=np.float32)
labels = np.array([[0],[1],[1],[0]], dtype=np.int32)
knn.train(train_data, cv2.ml.ROW_SAMPLE, labels)
# 測試數據
test_data = np.array([[0.5, 0.5]], dtype=np.float32)
ret, result, neighbors, dist = knn.findNearest(test_data, k=3)
print("預測結果:", result)
✅ 適用於簡單影像分類,例如顏色辨識、形狀分類等。
📝 總結
功能 | 語法 |
---|---|
人臉偵測 | cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml") |
SVM 影像分類 | svm.SVC(gamma=0.001).fit(X, y) |
KNN 物件分類 | knn.findNearest(test_data, k=3) |
🚀 現在你已經學會如何在 OpenCV 中應用機器學習!接下來,我們將學習 OpenCV 與深度學習的整合應用! 😊