gpt4 book ai didi

python - 如何使用 Python OpenCV 将图像裁剪为仅文本部分?

转载 作者:行者123 更新时间:2023-12-03 08:06:12 26 4
gpt4 key购买 nike

我想裁剪图像以仅提取文本部分。有数千个不同大小的坐标,因此我无法对坐标进行硬编码。我正在尝试删除左侧和底部不需要的线条。我怎样才能做到这一点?

<表类=“s-表”><标题>原始预期 <正文> image_1 image_2

最佳答案

通过查找图像中的所有非零点来确定最小跨度边界框。最后,使用此边界框裁剪图像。在这里查找轮廓非常耗时且不必要,特别是因为您的文本是轴对齐的。您可以通过组合 cv2.findNonZerocv2.boundingRect 来实现您的目标。

希望这会起作用! :

import numpy as np
import cv2
img = cv2.imread(r"W430Q.png")
# Read in the image and convert to grayscale
img = img[:-20, :-20] # Perform pre-cropping
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = 255*(gray < 50).astype(np.uint8) # To invert the text to white
gray = cv2.morphologyEx(gray, cv2.MORPH_OPEN, np.ones(
(2, 2), dtype=np.uint8)) # Perform noise filtering
coords = cv2.findNonZero(gray) # Find all non-zero points (text)
x, y, w, h = cv2.boundingRect(coords) # Find minimum spanning bounding box
# Crop the image - note we do this on the original image
rect = img[y:y+h, x:x+w]
cv2.imshow("Cropped", rect) # Show it
cv2.waitKey(0)
cv2.destroyAllWindows()

在上面的第四行代码中,我将阈值设置为低于 50,以使深色文本变为白色。但是,由于这会输出二进制图像,因此我将其转换为 uint8,然后缩放 255。文本实际上已反转。

然后,使用cv2.findNonZero,我们发现该图像的所有非零位置。然后,我们将其传递给cv2.boundingRect,它返回顶部- 边界框的左角及其宽度和高度。最后,我们可以利用它来裁剪图像。这是在原始图像上完成的,而不是反转版本。

关于python - 如何使用 Python OpenCV 将图像裁剪为仅文本部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72202507/

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