【发布时间】:2019-11-27 16:11:55
【问题描述】:
我有一张像 这样的提取图像,我想从这张图像中裁剪并提取单个字母。
我已经尝试了下面的代码,但它只适用于像 这样写的名称,对于这张图片,我一次只得到一个字母的预期结果。
import cv2
import numpy as np
img = cv2.imread('data1/NAME.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh1 = cv2.threshold(gray,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
kernel = np.ones((3, 3), np.uint8)
imgMorph = cv2.erode(thresh1, kernel, iterations = 1)
contours, hierarchy = cv2.findContours(imgMorph,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
i=1
for cnt in contours:
x,y,w,h = cv2.boundingRect(cnt)
if w>10 and w<100 and h>10 and h<100:
#save individual images
cv2.imwrite("data1/NAME_{}.png".format((i)),thresh1[y:y+h,x:x+w])
i=i+1
cv2.imshow('BindingBox',imgMorph)
cv2.waitKey(0)
cv2.destroyAllWindows()
【问题讨论】:
-
一个想法是使用水平内核进行扩张以将字母连接在一起。然后找到轮廓并使用最小阈值区域进行过滤。如果这通过了过滤器,那么它必须是文本,以便您可以保存 ROI。如果字母没有接触到盒子,这将起作用。第二种方法是简单地使用偏移量进行裁剪,因为您已经拥有每个提取图像的边界框。只需添加 15 的偏移量即可移除框。同样,这可能有限制,因为如果它连接到框,它将切断一些文本
-
此图像不是字母可能在框外或触及文本框的一种情况。我关心的是识别写在那个框中的文本,因为我正在尝试分割字母然后预测
标签: python-3.x opencv image-processing roi