Python OpenCV MINIST 單張圖片像素轉化二值化(手寫數字識別,時尚服裝識別)

手寫數字識別,要求28*28像素,白字黑底

一開始使用了SciPy來轉換

出現 AttributeError: module 'scipy' has no attribute 'misc' 報錯,應該是版本問題,修改無果,採用了更簡單的OpenCV

import cv2

image = cv2.imread("8.jpg")
image2 = cv2.resize(image, (28, 28))
gray = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU|cv2.THRESH_BINARY)

for i in range(28):
	for j in range(28):
		binary[i, j] = 255 - binary[i, j]

# cv2.imshow("binary", binary)
# cv2.waitKey(0)
cv2.imwrite("8_binary.jpg", binary)

進行尺寸修改,灰度化,二值化

然後遍歷每個像素,255 - 像素值實現反相

優化

後來經提醒,將遍歷改爲 ~ 運算:按位取反運算符

binary = ~binary

~的定義:對數據的每個二進制位取反,即把1變爲0,把0變爲1 。~x 類似於 -x-1

但是 255 應該變爲 -256了,而非0

後來經過試驗,發現圖片中的數字爲 numpy.uint8 格式,對於uint8 ,~ 爲 255-x

>>> d = np.uint8(5)
>>> d
5

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章