在OpenCV中找不到正确的轮廓

时间:2018-10-29 13:24:27

标签: python opencv ocr contour

我正在尝试构建OCR应用程序,并在Python中使用openCV作为其一部分。为了准备训练集,我有一个包含单词的图像带,我希望将该图像带与标签(字符串中的实际单词)一起提供给openCV进程,以便opencv进程将找到与每个字符相对应的正确轮廓一句话。

我面临的问题是轮廓错误的识别。这里显示的图片揭示了如何。左写的文本(AQR2035012)是与图像中的文本相对应的标签。可以看出,对应于不稳定轮廓的提取字符已被映射。

enter image description here enter image description here

我会在这里要求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()

这是原始图片

enter image description here

0 个答案:

没有答案