做網(wǎng)站的前景中企動力做網(wǎng)站推廣靠譜嗎
手寫數(shù)字筆跡細(xì)化
對于手寫數(shù)字識別實驗中,經(jīng)常會遇到因為筆跡較粗導(dǎo)致誤識別的情況,所以我們通常會先將筆跡進(jìn)行細(xì)化,筆跡變細(xì)以后,數(shù)字的特征會更明顯,后續(xù)進(jìn)行識別的準(zhǔn)確率就會更高。
例如數(shù)字7 和 1 ,因為書寫習(xí)慣的不同,在識別圖像如果使用原始圖像,筆跡較粗,經(jīng)常會識別錯誤,但是經(jīng)過腐蝕操作,筆跡變細(xì)以后,會很容易將二者區(qū)分開。
本期我們重點學(xué)習(xí)圖像的腐蝕操作,通過圖像腐蝕來將手寫數(shù)字的筆跡進(jìn)行細(xì)化。
完成本期內(nèi)容,你可以
-
了解圖像腐蝕的原理和應(yīng)用
-
掌握使用圖像腐蝕進(jìn)行圖像處理
若要運行案例代碼,你需要有:
-
操作系統(tǒng):Ubuntu 16 以上 或者 Windows10
-
工具軟件:VScode 或者其他源碼編輯器
-
硬件環(huán)境:無特殊要求
-
核心庫:python 3.6.13, opencv-contrib-python 3.4.11.39,opencv-python 3.4.2.16
點擊下載源碼
腐蝕
OpenCV將腐蝕封裝成了cv2.erode()
方法。
函數(shù)原型:dst = cv2.erode(src, kernel, anchor, iterations, borderType, borderValue)
dst為輸出圖像。
參數(shù)描述如下:
- src:被處理的圖像
- kernel:腐蝕使用的核
- anchor:可選參數(shù),錨點的位置
- iterations:可選參數(shù),腐蝕操作的迭代次數(shù),默認(rèn)值為1
- borderType:可選參數(shù),邊界樣式,建議采用默認(rèn)值
- borderValue:可選參數(shù),邊界值,建議采用默認(rèn)值
具體步驟
1. 創(chuàng)建項目結(jié)構(gòu)
創(chuàng)建項目名為手寫數(shù)字筆跡細(xì)化
,項目根目錄下新建code
文件夾儲存代碼,新建dataset
文件夾儲存數(shù)據(jù),項目結(jié)構(gòu)如下:
手寫數(shù)字筆跡細(xì)化 # 項目名稱
├── code # 儲存代碼文件
├── dataset # 儲存數(shù)據(jù)文件
注:如項目結(jié)構(gòu)已存在,無需再創(chuàng)建。
2. 使用腐蝕操作對數(shù)字 7
進(jìn)行處理
- 在
code
文件夾下創(chuàng)建number_7.py
文件; - 導(dǎo)入所需的庫,OpenCV、numpy;
- 讀取
dataset
文件夾下的7.png
圖片,并進(jìn)行展示; - 創(chuàng)建一個
13*13
的都為1 的數(shù)組作為濾波核; - 對圖像進(jìn)行腐蝕處理,并展示結(jié)果;
代碼實現(xiàn)
# 導(dǎo)入OpenCV、numpy
import cv2
import numpy as np# 讀取圖像
img = cv2.imread("../dataset/7.png")
cv2.imshow("original",img)# 創(chuàng)建13*13的都為1的數(shù)組作為核
k = np.ones((13, 13), np.uint8)
# 進(jìn)行腐蝕操作
dst = cv2.erode(img, k)
cv2.imshow("erode",dst)cv2.waitKey()
cv2.destroyAllWindows()
3. 使用腐蝕操作對數(shù)字 1
進(jìn)行處理
- 在
code
文件夾下創(chuàng)建number_1.py
文件; - 導(dǎo)入所需的庫,OpenCV、numpy;
- 讀取
dataset
文件夾下的1.png
圖片,并進(jìn)行展示; - 創(chuàng)建一個
13*13
的都為1 的數(shù)組作為濾波核; - 對圖像進(jìn)行腐蝕處理,并展示結(jié)果;
代碼實現(xiàn)
# 導(dǎo)入OpenCV、numpy
import cv2
import numpy as np# 讀取圖像
img = cv2.imread("../dataset/1.png")
cv2.imshow("original",img)# 創(chuàng)建13*13的都為1的數(shù)組作為核
k = np.ones((13, 13), np.uint8)
# 進(jìn)行腐蝕操作
dst = cv2.erode(img, k)
cv2.imshow("erode",dst)cv2.waitKey()
cv2.destroyAllWindows()
經(jīng)過腐蝕操作之后,圖像的筆跡明顯變細(xì),數(shù)字的結(jié)構(gòu)特征也更為明顯,更有助于后續(xù)的處理和識別。
點擊下載源碼