openCV中KNN算法的實現(xiàn)
OpenCV 是一個開源的跨平臺計算機(jī)視覺庫,它提供了各種用于圖像處理、計算機(jī)視覺任務(wù)的算法和工具,涵蓋圖像濾波、特征提取、目標(biāo)檢測、圖像分割、視頻分析等眾多領(lǐng)域,廣泛應(yīng)用于計算機(jī)視覺相關(guān)的科研和工業(yè)項目中,可幫助開發(fā)者快速實現(xiàn)各種視覺處理功能。
KNN(K-最近鄰)算法是一種簡單且常用的分類算法。其核心思想是:如果一個樣本在特征空間中的K個最相似的樣本中的大多數(shù)屬于某一個類別,則該樣本也屬于這個類別
KNN算法流程
計算距離:使用向量之間的距離來衡量樣本之間的相似度。常見的距離計算公式有歐式距離、曼哈頓距離等。
升序排序:根據(jù)計算好的距離進(jìn)行升序排序。
取前K樣本:選取距離最近的前K個樣本。
加權(quán)平均:根據(jù)距離對樣本進(jìn)行加權(quán)計算,距離越近,權(quán)重越高。
使用OpenCV實現(xiàn)KNN
以下是一張2000X1000像素的圖片,包含5000個數(shù)字,我們將左邊2500個數(shù)劃分訓(xùn)練集,右邊2500個數(shù)劃分為測試集,構(gòu)建模型訓(xùn)練結(jié)果

首先對圖像進(jìn)行切割并劃分訓(xùn)練集和測試集
import numpy as np
import cv2
img=cv2.imread('digits.png')#讀取名為 digits.png 的圖像文件。
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#將圖像轉(zhuǎn)換為灰度圖
cells=[np.hsplit(row,100) for row in np.vsplit(gray,50)]#將圖像垂直分割50行,水平分割100列
x=np.array(cells)
train=x[:,:50]#劃分訓(xùn)練集
test=x[:,50:100]#劃分測試集
#將數(shù)據(jù)展平并轉(zhuǎn)換為浮點型
?train_new=train.reshape(-1,400).astype(np.float32)
test_new=test.reshape(-1,400).astype(np.float32)創(chuàng)建標(biāo)簽并對模型進(jìn)行訓(xùn)練
k=np.arange(10)#生成一個數(shù)組 [0, 1, 2, ..., 9] labels=np.repeat(k,250)#將每個數(shù)字重復(fù)250次,生成標(biāo)簽數(shù)組,形狀為 (2500,) train_labels=labels[:,np.newaxis]#將標(biāo)簽數(shù)組轉(zhuǎn)換為列向量,形狀為 (2500, 1) test_labels=np.repeat(k,250)[:,np.newaxis] knn=cv2.ml.KNearest_create()#創(chuàng)建KNN模型 knn.train(train_new,cv2.ml.ROW_SAMPLE,train_labels)#使用訓(xùn)練數(shù)據(jù)和標(biāo)簽訓(xùn)練模型
測試模型,計算準(zhǔn)確率
ret,result,neighbours,dist=knn.findNearest(test_new,k=3)#對測試數(shù)據(jù)進(jìn)行預(yù)測,k=3 表示使用3個最近鄰居。ret:是否成功執(zhí)行。result:預(yù)測結(jié)果。neighbours:最近的鄰居。dist:與鄰居的距離。
print(ret,result,neighbours,dist)
#計算準(zhǔn)確率
matches=result==test_labels
correct=np.count_nonzero(matches)
accuracy=correct*100.0/result.size
print("當(dāng)前使用KNN識別手寫數(shù)字的準(zhǔn)確率為{}%。".format(accuracy))最終代碼輸出得到以下結(jié)果

到此這篇關(guān)于openCV中KNN算法的實現(xiàn)的文章就介紹到這了,更多相關(guān)openCV KNN 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python設(shè)計模式之迭代器模式原理與用法實例分析
這篇文章主要介紹了Python設(shè)計模式之迭代器模式原理與用法,結(jié)合具體實例形式分析了迭代器模式的概念、原理、定義及使用方法,代碼注釋說明簡單易懂,需要的朋友可以參考下2019-01-01
在Django中實現(xiàn)添加user到group并查看
今天小編就為大家分享一篇在Django中實現(xiàn)添加user到group并查看,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11
Python中用字符串調(diào)用函數(shù)或方法示例代碼
字符串作為python中常用的數(shù)據(jù)類型,掌握字符串的常用方法十分必要。下面這篇文章主要給大家介紹了關(guān)于Python中通過字符串調(diào)用函數(shù)或方法的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。2017-08-08
python?Gooey庫將命令行程序轉(zhuǎn)換成圖形用戶界面GUI應(yīng)用
這篇文章主要為大家介紹了python?Gooey庫將命令行程序轉(zhuǎn)換成圖形用戶界面GUI應(yīng)用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
python人工智能tensorflow函數(shù)tensorboard使用方法
這篇文章主要為大家介紹了python人工智能tensorflow函數(shù)tensorboard使用方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05

