我目前正在從事一個需要為 OCR 處理圖像的項目。我設置了過濾器以使 OCR 的工作盡可能簡單,但圖像的一個方面我無法弄清楚如何修復。在包含的圖像中,您可以看到我正在嘗試閱讀的文本(“PRTraining Tissue...”),并且圖像周圍有一個黑色邊框,需要刪除才能使我的歪斜校正代碼起作用。有沒有什么簡單的方法可以在不影響文字的情況下快速用白色填充這個黑色邊框?未過濾的圖像:過濾圖像:我已經編寫了一些代碼來刪除大部分背景,但是大的黑點仍然作為邊框。包含的代碼是我的圖像裁剪腳本,它刪除了大部分圖像的黑色邊框并嘗試盡可能地隔離文本,但不幸的是,它仍然留下了相當多的黑色,與我的歪斜校正腳本混淆。def boarderRemoval(img): """ Takes in a numpy array and crops the image down to isolate the text (Still leaves a small black border that varys from image to image\n Vars:\n - img <- numpy array of the label\n Returns:\n - Cropped down image with smaller black borders """ contours, hierarchy = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) cnt = contours[0] x,y,w,h = cv2.boundingRect(cnt) correctedImage = img[y: y + h, x: x + w] return correctedImage
1 回答

白衣非少年
TA貢獻1155條經驗 獲得超0個贊
從過濾后的圖像開始,這是一個簡單的方法
將圖像轉換為灰度并找到輪廓
在蒙版上繪制輪廓
反轉蒙版
按位或原始圖像
轉換為灰度后,我們找到要保留的主要輪廓,并將此部分繪制到蒙版上。之后,我們反轉遮罩來得到這個代表想要填充白色的邊框部分的圖像
現在我們簡單地cv2.bitwise_or()
用原始圖像來得到我們的結果
import cv2
import numpy as np
image = cv2.imread('1.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
mask = np.zeros(image.shape, dtype=np.uint8)
cnts = cv2.findContours(gray, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
cv2.fillPoly(mask, cnts, [255,255,255])
mask = 255 - mask
result = cv2.bitwise_or(image, mask)
cv2.imshow('mask', mask)
cv2.imshow('result', result)
cv2.waitKey(0)
添加回答
舉報
0/150
提交
取消