openCV中KNN算法的實(shí)現(xiàn)
OpenCV 是一個(gè)開源的跨平臺(tái)計(jì)算機(jī)視覺庫,它提供了各種用于圖像處理、計(jì)算機(jī)視覺任務(wù)的算法和工具,涵蓋圖像濾波、特征提取、目標(biāo)檢測(cè)、圖像分割、視頻分析等眾多領(lǐng)域,廣泛應(yīng)用于計(jì)算機(jī)視覺相關(guān)的科研和工業(yè)項(xiàng)目中,可幫助開發(fā)者快速實(shí)現(xiàn)各種視覺處理功能。
KNN(K-最近鄰)算法是一種簡(jiǎn)單且常用的分類算法。其核心思想是:如果一個(gè)樣本在特征空間中的K個(gè)最相似的樣本中的大多數(shù)屬于某一個(gè)類別,則該樣本也屬于這個(gè)類別
KNN算法流程
計(jì)算距離:使用向量之間的距離來衡量樣本之間的相似度。常見的距離計(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í)別手寫數(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-05Python讀取圖片EXIF信息類庫介紹和使用實(shí)例
這篇文章主要介紹了Python讀取圖片EXIF信息類庫介紹和使用實(shí)例,例如Python Imaging Library、EXIF.py等,需要的朋友可以參考下2014-07-07Python標(biāo)準(zhǔn)庫:內(nèi)置函數(shù)max(iterable, *[, key, default])說明
這篇文章主要介紹了Python標(biāo)準(zhǔn)庫:內(nèi)置函數(shù)max(iterable, *[, key, default])說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04python list數(shù)據(jù)等間隔抽取并新建list存儲(chǔ)的例子
今天小編就為大家分享一篇python list數(shù)據(jù)等間隔抽取并新建list存儲(chǔ)的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-11-11關(guān)于python3.9安裝wordcloud出錯(cuò)的問題及解決辦法
這篇文章主要介紹了關(guān)于python3.9安裝wordcloud出錯(cuò)的問題及解決辦法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11