【问题标题】:reduce jagged edges and output perfect alphabet减少锯齿状边缘并输出完美字母
【发布时间】:2019-06-13 05:41:06
【问题描述】:

我有一个输入图像:

我正在对图像进行标准化,然后使用 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)

输出图像为:

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

输出应该是这样的:

P.S.请注意,输出图像不一定是二进制

【问题讨论】:

  • 能否请您发布所有代码?我不知道g 来自哪里,也不知道你在标准化之前对图像做了什么(如果你甚至在做任何事情)
  • “完美”是什么意思?您只想删除字母周围的框架吗?或者您是否也想平滑字母本身的边缘?这听起来像是 OCR 的一项任务:检测字母,用文本覆盖替换它们。

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


【解决方案1】:

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

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

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

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)

【讨论】:

  • 非常感谢您的努力,我需要更精确,是否可行?我在问题描述中添加了预期输出
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-22
  • 2019-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多