主要代碼參考https://blog.csdn.net/wzh191920/article/details/79589506
GitHub:https://github.com/yinghualuowu
首先我們需要一個函數可以隨時獲取圖片,無論在什么地方
filename = askopenfilename(title="選擇識別圖片", filetypes=[("jpg圖片", "*.jpg"),("png圖片","*.png")])
def img_read(filename): return cv2.imdecode(np.fromfile(filename, dtype=np.uint8), cv2.IMREAD_COLOR)
另外我們需要考慮圖片大小
pic_hight,pic_width = img.shape[:2]
if pic_width > MAX_WIDTH:
resize_rate = MAX_WIDTH / pic_width
img = cv2.resize(img, (MAX_WIDTH, int(pic_hight * resize_rate)), interpolation=cv2.INTER_AREA)
#縮小圖片
進行形態學操作,以下步驟並不是必選項,根據方法來選取一些預處理步驟
blur = 3 img = cv2.GaussianBlur(img,(blur,blur),0) oldimg = img img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #轉化成灰度圖像 Matrix = np.ones((20, 20), np.uint8) img_opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, Matrix) img_opening = cv2.addWeighted(img, 1, img_opening, -1, 0) #創建20*20的元素為1的矩陣 開操作,並和img重合 ret, img_thresh = cv2.threshold(img_opening, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) img_edge = cv2.Canny(img_thresh, 100, 200) #Otsu’s二值化 找到圖像邊緣 Matrix = np.ones((4, 19), np.uint8) img_edge1 = cv2.morphologyEx(img_edge, cv2.MORPH_CLOSE, Matrix) img_edge2 = cv2.morphologyEx(img_edge1, cv2.MORPH_OPEN, Matrix)
比如下面這張進行預處理后,就變成