更新於 2024/07/25閱讀時間約 5 分鐘

[OpenCV][Python]OCR辨識影像前處理_增加邊框

在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讀取前,在增加就好,在原圖增加白色或黑色邊框,若跟原圖背景差異太大,只會被OCR辨識模型視為雜訊而已。


其他tesseract相關文章

[OCR][Python]tesseract 辨識模型Fine tune

[OCR_應用]Tesseract-OCR_Config說明

[OCR_應用]Tesseract-OCR_擷取字元面積

[OCR][Python]測試tesseract與easyOCR誰比較準跟快

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.