减少锯齿边缘并输出完美的字母

时间:2019-06-13 05:41:06

标签: python python-3.x opencv computer-vision

我有一个输入图像:

Input1

我先将图像标准化,然后使用OTSU将其二值化。

import cv2
import numpy as np
import sys
import os
import time
import imutils
import numpy as np
from matplotlib import pyplot as plt
import re
import math
orgImg = cv2.imread(sys.argv[1])
orgHeight,orgWidth,_ = orgImg.shape
image = imutils.resize(orgImg,height=350)
rheight, rwidth,_= image.shape
kernel = np.ones((7,7), np.uint16)
# image = cv2.erode(image, kernel, iterations=1)
image11 = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 
# Copy image to new variable
g = image11.copy()
cv2.normalize(g, g, 70, 255, cv2.NORM_MINMAX)
ret,black_mask = cv2.threshold(g,110,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
cv2.imshow("image",black_mask)
cv2.imwrite(sys.argv[1]+"thresh.jpg",black_mask)
cv2.waitKey(0)

输出图像为:

Output1

在输出中有许多锯齿状的边缘。如何去除这些边缘并获得完美的“ Ca”?

输出应如下所示:

Expected output

PS 。请注意,输出图像不一定必须是二进制的

1 个答案:

答案 0 :(得分:0)

如果不使用imutils调整大小,结果将如下所示:

Result

我不确定输出图像中多余的黑线是从哪里来的,因为在我直接运行代码时不会创建黑线。

我更改了您的代码并对其进行了清理,现在看起来像这样:

import cv2
import numpy as np
from PIL import Image

orgImg = cv2.imread("ca.png")

image11 = cv2.cvtColor(orgImg, cv2.COLOR_BGR2GRAY)

cv2.normalize(image11, image11, 70, 255, cv2.NORM_MINMAX)
ret, black_mask = cv2.threshold(image11, 110, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

cv2.imshow("Original image", orgImg)
cv2.imshow("Final image", black_mask)
cv2.waitKey(0)

cv2.imwrite("ca_blackmask.png", black_mask)