gpt4 book ai didi

python - 从图像中提取和保存字符

转载 作者:行者123 更新时间:2023-12-01 15:58:28 25 4
gpt4 key购买 nike

我正在跟进这篇文章:How to extract only characters from image?

此解决方案非常适合我(通过一些调整)达到预期目的。但是,我试图通过保存每个字符来更进一步。因此,在本文的示例中,我希望将字符 KNM 保存为它们自己的单独图像。我尝试使用带有 rect 对象的 cv2.imwrite 函数遍历嵌套的 if 循环,尽管最终输出是包含整个图像的 7 张图像,每次只有一个额外的矩形来突出显示下一个轮廓。

example image:

最佳答案

这里有一个简单的方法:

  1. 获取二值图像。加载图像,灰度,Otsu's threshold

  2. 提取 ROI。 Find contours并从左到右排序,以确保我们使用 imutils.contours.sort_contours 以正确的顺序排列轮廓。 .我们使用 contour area 进行过滤然后使用 Numpy 切片提取并保存每个 ROI。


输入

enter image description here

二值图像

enter image description here

检测到的字符以绿色突出显示

enter image description here

提取的 ROI

enter image description here

代码

import cv2
from imutils import contours

# Load image, grayscale, Otsu's threshold
image = cv2.imread('1.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU + cv2.THRESH_BINARY_INV)[1]

# Find contours, sort from left-to-right, then crop
cnts = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
cnts, _ = contours.sort_contours(cnts, method="left-to-right")

# Filter using contour area and extract ROI
ROI_number = 0
for c in cnts:
area = cv2.contourArea(c)
if area > 10:
x,y,w,h = cv2.boundingRect(c)
ROI = image[y:y+h, x:x+w]
cv2.imwrite('ROI_{}.png'.format(ROI_number), ROI)
cv2.rectangle(image, (x, y), (x + w, y + h), (36,255,12), 2)
ROI_number += 1

cv2.imshow('thresh', thresh)
cv2.imshow('image', image)
cv2.waitKey()

关于python - 从图像中提取和保存字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60515216/

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