在tesseract-ocr辨識應用中,建議的留白邊框為10pixl,若Label列印的太剛好,沒有任何的邊框時,就會辨識不到文字。
本文將帶大家如何讓圖像增加邊框。
示意的比較誇張,我讓邊框增加100pixl,圖片大小原為211*80。
import cv2
import numpy as np
def add_spacing_img(img,spacing):
# 創建黑色背景的圖像
h,w = img.shape[:2]
new_height = h + 2 * spacing
new_width = w + 2 * spacing
# 如果是彩色圖
if len(img.shape) == 3 and img.shape[2] == 3:
res_img = np.zeros((new_height, new_width, 3), dtype=np.uint8)
else:
res_img = np.zeros((new_height, new_width), dtype=np.uint8)
res_img[spacing:h+spacing, spacing:w+spacing] = img
return res_img
img = cv2.imread(f'圖片路徑')
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
new_image = add_white_spacing_img(gray_img,100)
cv2.imshow('new_image',new_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
def add_spacing_img(img, spacing):
這是函式的定義。函式名為 add_spacing_img
,接受兩個參數:
img
: 要處理的圖像(可以是灰度圖或彩色圖像)。spacing
: 圖像四周要添加的黑色邊框寬度。h, w = img.shape[:2]
取得圖像的高度 (h
) 和寬度 (w
)。
new_height = h + 2 * spacing
new_width = w + 2 * spacing
定義增加間距後的新圖像的高度和寬度。新的高度是原高度加上兩倍的間距(上下各一),新的寬度是原寬度加上兩倍的間距(左右各一)。
if len(img.shape) == 3 and img.shape[2] == 3:
res_img = np.zeros((new_height, new_width, 3), dtype=np.uint8)
else:
res_img = np.zeros((new_height, new_width), dtype=np.uint8)
這段程式碼根據輸入圖像的類型創建一個黑色背景的新圖像:
(new_height, new_width, 3)
的黑色圖像。(new_height, new_width)
的黑色圖像。res_img[spacing:h+spacing, spacing:w+spacing] = img
這行程式碼將原圖像放置在新圖像的中央位置。具體做法是:
spacing
行到第 h+spacing
行,從第 spacing
列到第 w+spacing
列的區域設置為原圖像的像素值。假設要白色邊框,只需要更動第11行~14行。
# 如果是彩色圖像
if len(img.shape) == 3 and img.shape[2] == 3:
res_img = np.ones((new_height, new_width, 3), dtype=np.uint8) * 255
else: # 如果是灰度圖像
res_img = np.ones((new_height, new_width), dtype=np.uint8) * 255
np.ones
創建一個所有元素為1的數組。對於彩色圖像,數組的形狀是 (new_height, new_width, 3)
;對於灰度圖像,數組的形狀是 (new_height, new_width)
。* 255
將所有元素乘以255,這樣每個像素的值都會是255(對於8位圖像,255代表白色)。[OCR][Python]tesseract 辨識模型Fine tune