Skip to content

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 與深度學習的整合應用! 😊