- OpenCV Python 教程
- OpenCV Python - 首頁
- OpenCV Python - 概述
- OpenCV Python - 環境配置
- OpenCV Python - 讀取影像
- OpenCV Python - 寫入影像
- OpenCV Python - 使用Matplotlib
- OpenCV Python - 影像屬性
- OpenCV Python - 位運算
- OpenCV Python - 形狀和文字
- OpenCV Python - 滑鼠事件
- OpenCV Python - 新增軌跡條
- OpenCV Python - 縮放和旋轉
- OpenCV Python - 影像閾值
- OpenCV Python - 影像濾波
- OpenCV Python - 邊緣檢測
- OpenCV Python - 直方圖
- OpenCV Python - 顏色空間
- OpenCV Python - 影像變換
- OpenCV Python - 影像輪廓
- OpenCV Python - 模板匹配
- OpenCV Python - 影像金字塔
- OpenCV Python - 影像加法
- OpenCV Python - 影像混合
- OpenCV Python - 傅立葉變換
- OpenCV Python - 捕捉影片
- OpenCV Python - 播放影片
- OpenCV Python - 從影片中提取影像
- OpenCV Python - 從影像生成影片
- OpenCV Python - 人臉檢測
- OpenCV Python - 均值漂移/CamShift
- OpenCV Python - 特徵檢測
- OpenCV Python - 特徵匹配
- OpenCV Python - 數字識別
- OpenCV Python 資源
- OpenCV Python - 快速指南
- OpenCV Python - 資源
- OpenCV Python - 討論
OpenCV Python - 基於KNN的數字識別
KNN,代表**K近鄰**,是一種基於監督學習的機器學習演算法。它試圖將一個新的資料點歸類到與現有類別最相似的類別中。所有現有的資料都被分類到不同的類別中,一個新的資料點根據相似性被歸類到其中一個類別中。
KNN演算法基於以下原則:
- 選擇一個奇數作為K,表示要檢查的鄰居數量。
- 計算它們的歐氏距離。
- 根據計算出的歐氏距離,獲取K個最近鄰。
- 統計每個類別中資料點的數量。
- 資料點數量最多的類別就是新的資料點被歸類的類別。
作為使用OpenCV實現KNN演算法的示例,我們將使用以下影像digits.png,它包含5000張手寫數字的影像,每張影像大小為20X20畫素。
第一個任務是將此影像分割成5000個數字。這是我們的特徵集。將其轉換為NumPy陣列。程式如下:
import numpy as np
import cv2
image = cv2.imread('digits.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
fset=[]
for i in np.vsplit(gray,50):
x=np.hsplit(i,100)
fset.append(x)
NP_array = np.array(fset)
現在我們將這些資料分成訓練集和測試集,每個大小為(2500,20x20),如下所示:
trainset = NP_array[:,:50].reshape(-1,400).astype(np.float32) testset = NP_array[:,50:100].reshape(-1,400).astype(np.float32)
接下來,我們必須為每個數字建立10個不同的標籤,如下所示:
k = np.arange(10) train_labels = np.repeat(k,250)[:,np.newaxis] test_labels = np.repeat(k,250)[:,np.newaxis]
現在我們可以開始KNN分類了。建立分類器物件並訓練資料。
knn = cv2.ml.KNearest_create() knn.train(trainset, cv2.ml.ROW_SAMPLE, train_labels)
選擇k值為3,獲取分類器的輸出。
ret, output, neighbours, distance = knn.findNearest(testset, k = 3)
將輸出與測試標籤進行比較,以檢查分類器的效能和準確性。
該程式顯示在準確檢測手寫數字方面,準確率為91.64%。
result = output==test_labels correct = np.count_nonzero(result) accuracy = (correct*100.0)/(output.size) print(accuracy)
廣告