如何去除 OCR 背面的装饰图案?
How can I remove the back decorative pattern for my OCR?
我试过GaussianBlur
和adaptiveThreshold
,但是这种背面花纹很困扰我。
我可以试试别的吗?有什么想法吗?
这是解决方案的完整代码:
import cv2
import numpy as np
img = cv2.imread('test.png', 0)
img2 = np.zeros_like(img)
cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU,img)
image, contours, hier = cv2.findContours(img, cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
for c in contours:
if cv2.contourArea(c)>50:
cv2.drawContours(img2, c, -1, (255, 255, 255), -1)
kernel = np.ones((40, 10), np.uint8)
img2 = cv2.morphologyEx(img2, cv2.MORPH_CLOSE, kernel)
cv2.imshow("image", img2)
cv2.waitKey(0)
首先,您应该使用 cv2.THRESH_BINARY
和 cv2.THRESH_OTSU
方法对图像进行二值化。结果将是这样的:
之后,您应该去除结果图像中的噪点。为此,我在这里所做的是,我使用 cv2.findContours
获取图像的轮廓并计算 cv2.contourArea
。然后使用阈值过滤掉小轮廓以去除噪声。在那之后,我执行了 cv2.morphologyEx
来组合被腐蚀的字符。
最终结果是这样的:
我试过GaussianBlur
和adaptiveThreshold
,但是这种背面花纹很困扰我。
我可以试试别的吗?有什么想法吗?
这是解决方案的完整代码:
import cv2
import numpy as np
img = cv2.imread('test.png', 0)
img2 = np.zeros_like(img)
cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU,img)
image, contours, hier = cv2.findContours(img, cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
for c in contours:
if cv2.contourArea(c)>50:
cv2.drawContours(img2, c, -1, (255, 255, 255), -1)
kernel = np.ones((40, 10), np.uint8)
img2 = cv2.morphologyEx(img2, cv2.MORPH_CLOSE, kernel)
cv2.imshow("image", img2)
cv2.waitKey(0)
首先,您应该使用 cv2.THRESH_BINARY
和 cv2.THRESH_OTSU
方法对图像进行二值化。结果将是这样的:
之后,您应该去除结果图像中的噪点。为此,我在这里所做的是,我使用 cv2.findContours
获取图像的轮廓并计算 cv2.contourArea
。然后使用阈值过滤掉小轮廓以去除噪声。在那之后,我执行了 cv2.morphologyEx
来组合被腐蚀的字符。
最终结果是这样的: