opencv2.4.13+python2.7學習筆記--使用 knn對手寫數字OCR

閱讀對象:熟悉knn、了解opencv和python。

1.knn理論介紹:算法學習筆記:knn理論介紹

2. opencv中knn函數

路徑:opencv\sources\modules\ml\include\opencv2\ml\ml.hpp

3.案例

3.1數據集介紹

我們的目的是創建一個可以對手寫數字進行識別的程序。為了達到這個目的我們需要訓練數據和測試數據。OpenCV 安裝包中有一副圖片(/samples/python2/data/digits.png), 其中有5000 個手寫數字(每個數字重復 500遍)。每個數字是一個20x20 的小圖。 所以第一步就是將這個圖像分割成 5000個不同的數字。我們在將拆分后的每一個數字的圖像重排成一行含有 400 個像素點的新圖像。這個就是我們的特征集,所有像素的灰度值。這是我們能創建的最簡單的特征集。我們使用每個數字的前 250 個樣本做訓練數據,剩余的250 個做測試數據。

3.2代碼

示例中得到的準確率為91.72%,和官網結果一樣,可以結合統計中的抽樣重新分配訓練集和測試集,也可以嘗試用不同的距離度量方法(或者相似度度量方法),取不同的K,重新進行數據實驗,時間有限,我并沒有去找哪個參數代表的是距離度量方法。[備注,方便查閱]

import numpy as np
import cv2
from matplotlib import pyplot as pltdir='C:/Users/Thinkpad/Desktop/picture/'
img = cv2.imread(dir+'5.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)# Now we split the image to 5000 cells, each 20x20 size
cells = [np.hsplit(row,100) for row in np.vsplit(gray,50)]# Make it into a Numpy array. It size will be (50,100,20,20)
x = np.array(cells)# Now we prepare train_data and test_data.
train = x[:,:50].reshape(-1,400).astype(np.float32) # Size = (2500,400)
test = x[:,50:100].reshape(-1,400).astype(np.float32) # Size = (2500,400)# Create labels for train and test data
k = np.arange(10)
train_labels = np.repeat(k,250)[:,np.newaxis]
test_labels = train_labels.copy()# Initiate kNN, train the data, then test it with test data for k=1
knn = cv2.KNearest()
knn.train(train,train_labels)
ret,result,neighbours,dist = knn.find_nearest(test,k=5)# Now we check the accuracy of classification
# For that, compare the result with test_labels and check which are wrong
matches = result==test_labels
correct = np.count_nonzero(matches)
accuracy = correct*100.0/result.size
print accuracy

4.3中的圖片

參考資料:[1]http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_ml/py_knn/py_knn_opencv/py_knn_opencv.html

end!!

?

轉載于:https://www.cnblogs.com/llfisher/p/6560696.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371307.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371307.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371307.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何遠程管理Quartz

選項1:JMX 許多人問他們是否可以通過JMX管理Quartz,但我不確定為什么Quartz doc甚至不會提及它。 是的,您可以使用quartz.properties的以下命令啟用石英中的JMX org.quartz.scheduler.jmx.export true之后,您可以使用標準的JMX客…

熱啟動必須聯網嗎_供暖結束,地暖是關閉供水閥門還是關閉回水閥門?你做對了嗎?...

天氣漸漸暖和起來很多城市都停止供暖了一些家庭也停止使用地暖那么今天就來聊一聊,停止供暖后地暖系統應該怎么保養地暖不用時候是關閉供水閥門還是關閉回水閥門?供暖結束 暖氣閥門到底要不要關一般來說,我們供暖期結束是不用關閉總閥門的。因…

python學習(九) 網絡編程學習--簡易網站服務器

python 網絡編程和其他語言都是一樣的,服務器這塊步驟為:1. 創建套接字2. 綁定地址3. 監聽該描述符的所有請求4. 有新的請求到了調用accept處理請求 Python Web服務器網關接口(Python Web Server Gateway Interface,簡稱“WSGI”&…

concurrency 方面的books

http://joeduffyblog.com/2016/11/30/15-years-of-concurrency/轉載于:https://www.cnblogs.com/WCFGROUP/p/6566150.html

Spring 3.1緩存和配置

我最近在博客中談論有關Spring 3.1及其新的緩存注釋Cacheable和CacheEvict 。 與所有Spring功能一樣,您需要進行一定數量的設置,并且通常使用Spring的XML配置文件來完成。 在緩存的情況下,打開Cacheable和CacheEvict并不容易,因為…

按條件分類_保稅倉儲企業能否同時存儲非保貨物?“倉儲貨物安裝臺分類監管”如何申請?...

保稅倉儲企業能否同時存儲非保貨物呢?保稅和非保貨物是不是真的不能同在一個“屋檐下”呢?哪些企業可以開展“倉儲貨物按狀態分類監管”業務?企業又該如何申請該項業務?本文就對這些問題進行一下梳理。什么是“倉儲貨物按狀態分類…

ZooKeeper的原理(轉)

一、ZooKeeper的角色 領導者(Leader),負責進行投票的發起和決議,更新系統狀態。 學習者(Learner),包括跟隨者(Follower)和觀察者(Observer)&#…

java課堂筆記

轉載于:https://www.cnblogs.com/16-C-kai/p/6567042.html

Spring– DAO和服務層

歡迎來到Spring教程的第三部分。 在這一部分中,我們將繼續編寫Timesheet應用程序,這次我們將實現DAO層,業務服務并編寫一些測試。 在上一部分中,我們定義了GenericDao接口,該接口告訴我們需要對實體執行哪些操作。 現在…

51nod 1907(多項式乘法啟發式合并)

題目: 分析: 對于一個確定的生成子圖,很明顯是在一個連通塊上走,走完了再跳到另一個連通塊上,假設連通塊個數為cnt,那么答案一定是$min(a_{cnt-1},a_cnt,..,a_{n-1})$ 那現在的問題就是如何求出對于原圖而言…

煮飯的機器人作文_公示|“筆隨我心、心由筆動”作文大賽獲獎名單

卡士大昌杯“筆隨我心、心由筆動”獲獎作品開平的咸湯圓滑輪記/我的宅家成長記折疊式小屋/夕陽/包粽子在過去的卡士大昌杯“筆隨我心、心由筆動”作文活動中我們收到了許多優秀投稿經過專業團隊評選得出獲獎選手作品如下主辦方協辦方一等獎《…

BZOJ 4491: 我也不知道題目名字是什么

4491: 我也不知道題目名字是什么 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 278 Solved: 154[Submit][Status][Discuss]Description 給定一個序列A[i],每次詢問l,r,求[l,r]內最長子串,使得該子串為不上升子串或不下降子串 Input 第一…

Spring-boot中讀取config配置文件的兩種方式

了解過spring-Boot這個技術的,應該知道Spring-Boot的核心配置文件application.properties,當然也可以通過注解自定義配置文件的信息。 Spring-Boot讀取配置文件的方式: 一.讀取核心配置文件信息application.properties的內容 核心配置文件是指…

JavaFX 2 GameTutorial第5部分

介紹 這是與JavaFX 2 Game Tutorial相關的六部分系列的第五部分。 我知道自從我寫關于游戲的博客以來已經很長時間了,但希望您仍然與我在一起。 如果您想回顧一下,請閱讀第1部分 , 第2 部分 , 第3 部分和第4 部分 ,以了…

h5是可以一鍵打包小程序的_H5手機網站封裝打包微信小程序并實現分享及微信支付...

手機網站打包小程序教程,生成小程序,網頁版小程序 打包微信小程序,H5封裝成微信小程序。微信小程序開發一般分為2種方式,一種就是原生開發小程序,一種是將手機網站打包成小程序。原生開發小程序成本較高,技…

Hive中的數據庫、表、數據與HDFS的對應關系

1、hive數據庫 我們在hive終端,查看數據庫信息,可以看出hive有一個默認的數據庫default,而且我們還知道hive數據庫對應的是hdfs上面的一個目錄,那么默認的數據庫default到底對應哪一個目錄呢?我們可以通過hive配置文件…

軟件工程概論作業3

轉載于:https://www.cnblogs.com/clueless/p/6568351.html

使用JSF的面向服務的UI

在大型軟件開發項目中,面向服務的體系結構非常常見,因為它提供了可供不同團隊或部門使用的功能接口。 創建用戶界面時,應應用相同的原理。 對于具有開票部門和客戶管理部門等的大型公司,組織結構圖可能如下所示: 如果計…

pocib模板流程圖_各單據流程POCIB

POCIB各階段流程報關流程從廣義上講,報關是指進出境運輸工具負責人、進出境口貨物收發貨人、進出境物品的所有人或者他們的代理人向海關辦理運輸工具、貨物、物品進出境手續及相關手續的全過程。其中,進出境運輸工具負責人、進出口貨物收發貨人、進出境物…

WinDbg 查看靜態變量

有如下Class。若想查看靜態變量內容。因為靜態變量和類綁定,僅需要查看類即可。 namespace ConsoleApplication13 {class Program{public static string public_string "pubstr_static";public static string private_string "pristr_static"…