gpt4 book ai didi

python - 如何使用 opencv python 检测并增加文本图像中两行之间的间距?

转载 作者:行者123 更新时间:2023-12-03 02:13:03 24 4
gpt4 key购买 nike

enter image description here

如果初始图像是这样的(上图),那么我可以成功在两条线之间引入空格并获得此图像(下图) enter image description here

使用下面的代码:

import os
import cv2
def space_between_lines_and_skewness_correction(file_path):
img = cv2.imread(os.path.expanduser(file_path))
grey = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
th, threshed = cv2.threshold(grey, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)
pts = cv2.findNonZero(threshed)
ret = cv2.minAreaRect(pts)
(cx, cy), (w, h), ang = ret

if w < h:
w, h = h, w
ang += 90
M = cv2.getRotationMatrix2D((cx, cy), ang, 1.0)
rotated = cv2.warpAffine(threshed, M, (img.shape[1], img.shape[0]))
hist = cv2.reduce(rotated, 1, cv2.REDUCE_AVG).reshape(-1)
th = 2
H, W = img.shape[:2]
delimeter = [y for y in range(H - 1) if hist[y] <= th < hist[y + 1]]
arr = []
y_prev = 0
y_curr = 0
for y in delimeter:
y_prev = y_curr
y_curr = y
arr.append(rotated[y_prev:y_curr, 0:W])

arr.append(rotated[y_curr:H, 0:W])
space_arr = np.zeros((10, W))
final_img = np.zeros((1, W))

for im in arr:
v = np.concatenate((space_arr, im), axis=0)
final_img = np.concatenate((final_img, v), axis=0)
return final_img

上面的代码将消除偏斜并引入空间。但在少数情况下,上述代码不起作用。这些案例如下:enter image description here图像的输出是 enter image description here

遇到这样的情况该如何处理?

注意:我尝试将大小调整为更大的尺寸,并进行逐像素迭代,并针对这种情况构建自定义算法,但需要花费大量时间来解决,有时还会出现内存错误。

请注意:上述代码的输入实际上是此处提供的图像的反图像(白色背景)

最佳答案

也许这有帮助:

def detect_letters(img):

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# just to remove noise
thresh_val, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

num_labels, _, stats, centroids = cv2.connectedComponentsWithStats(thresh)

for i in range(num_labels):
leftmost_x = stats[i, cv2.CC_STAT_LEFT]
topmost_y = stats[i, cv2.CC_STAT_TOP]
width = stats[i, cv2.CC_STAT_WIDTH]
height = stats[i, cv2.CC_STAT_HEIGHT]

# enclose all detected components in a blue rectangle
cv2.rectangle(img, (leftmost_x, topmost_y), (leftmost_x + width, topmost_y + height), (255, 0, 0), 2)

cv2.imshow("window", img)
cv2.waitKey(0) & 0xFF

输入: enter image description here

输出:

enter image description here

上述解决方案的主要目的只是在每个字母周围获得一个封闭的矩形。

现在您需要做的就是将所有这些字母移至上方或下方或任何您想要的位置。

例如,在以下链接中查看足球是如何移动的:https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_core/py_basic_ops/py_basic_ops.html

现在您知道每个字母的最顶部和最底部 y 坐标,您可以看到它们当前有多远,如果它们非常接近,只需按照上面的链接移动字母即可。

同一行上的字母的顶点坐标或质心差异很小。您可以有一个容差范围来找出所有这些字母。

如有任何问题,请随时询问。

关于python - 如何使用 opencv python 检测并增加文本图像中两行之间的间距?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59648168/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com