我正在尝试构建OCR应用程序,并在Python中使用openCV作为其一部分。为了准备训练集,我有一个包含单词的图像带,我希望将该图像带与标签(字符串中的实际单词)一起提供给openCV进程,以便opencv进程将找到与每个字符相对应的正确轮廓一句话。
我面临的问题是轮廓错误的识别。这里显示的图片揭示了如何。左写的文本(AQR2035012)是与图像中的文本相对应的标签。可以看出,对应于不稳定轮廓的提取字符已被映射。
我会在这里要求opencv大师向我建议我做错了什么。 谢谢。
代码如下:
image=cv2.imread(os.path.join(training_images_folder,imagefolder,filename))
image = cv2.GaussianBlur(image, (5, 5), 0)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 0, 150, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]
contours = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contours = contours[0] if imutils.is_cv2() else contours[1]
letter_image_regions = []
for contour in contours:
(x,y,w,h) = cv2.boundingRect(contour)
if(w/h>0.5):
trim_width=int(w / 2)
letter_image_regions.append((x,y,trim_width,h))
letter_image_regions.append((x + trim_width, y, trim_width, h))
else:
letter_image_regions.append((x,y,w,h))
for letter_bounding_box, letter_text in zip(letter_image_regions, extracted_label):
x,y,w,h = letter_bounding_box
letter_image = gray[y-2:y+h+2, x-2:x+w+2]
print(extracted_label, letter_text)
cv2.imshow('img',letter_image)
cv2.waitKey()
这是原始图片