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

首先對(duì)圖像進(jìn)行切割并劃分訓(xùn)練集和測(cè)試集
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]#劃分測(cè)試集
#將數(shù)據(jù)展平并轉(zhuǎn)換為浮點(diǎn)型
?train_new=train.reshape(-1,400).astype(np.float32)
test_new=test.reshape(-1,400).astype(np.float32)創(chuàng)建標(biāo)簽并對(duì)模型進(jìn)行訓(xùn)練
k=np.arange(10)#生成一個(gè)數(shù)組 [0, 1, 2, ..., 9] labels=np.repeat(k,250)#將每個(gè)數(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)練模型
測(cè)試模型,計(jì)算準(zhǔn)確率
ret,result,neighbours,dist=knn.findNearest(test_new,k=3)#對(duì)測(cè)試數(shù)據(jù)進(jìn)行預(yù)測(cè),k=3 表示使用3個(gè)最近鄰居。ret:是否成功執(zhí)行。result:預(yù)測(cè)結(jié)果。neighbours:最近的鄰居。dist:與鄰居的距離。
print(ret,result,neighbours,dist)
#計(jì)算準(zhǔn)確率
matches=result==test_labels
correct=np.count_nonzero(matches)
accuracy=correct*100.0/result.size
print("當(dāng)前使用KNN識(shí)別手寫(xiě)數(shù)字的準(zhǔn)確率為{}%。".format(accuracy))最終代碼輸出得到以下結(jié)果

到此這篇關(guān)于openCV中KNN算法的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)openCV KNN 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python深度學(xué)習(xí)tensorflow1.0參數(shù)初始化initializer
這篇文章主要為大家介紹了python深度學(xué)習(xí)tensorflow1.0參數(shù)初始化initializer示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
卷積神經(jīng)網(wǎng)絡(luò)經(jīng)典模型及其改進(jìn)點(diǎn)學(xué)習(xí)匯總
這篇文章主要為大家介紹了卷積神經(jīng)網(wǎng)絡(luò)經(jīng)典模型及其改進(jìn)點(diǎn)學(xué)習(xí)匯總,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
Python讀取圖片EXIF信息類庫(kù)介紹和使用實(shí)例
這篇文章主要介紹了Python讀取圖片EXIF信息類庫(kù)介紹和使用實(shí)例,例如Python Imaging Library、EXIF.py等,需要的朋友可以參考下2014-07-07
Python標(biāo)準(zhǔn)庫(kù):內(nèi)置函數(shù)max(iterable, *[, key, default])說(shuō)明
這篇文章主要介紹了Python標(biāo)準(zhǔn)庫(kù):內(nèi)置函數(shù)max(iterable, *[, key, default])說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04
python list數(shù)據(jù)等間隔抽取并新建list存儲(chǔ)的例子
今天小編就為大家分享一篇python list數(shù)據(jù)等間隔抽取并新建list存儲(chǔ)的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11
關(guān)于python3.9安裝wordcloud出錯(cuò)的問(wèn)題及解決辦法
這篇文章主要介紹了關(guān)于python3.9安裝wordcloud出錯(cuò)的問(wèn)題及解決辦法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11

