首页 > 解决方案 > 图像中的 Concat 轮廓

问题描述

我正在制作车牌识别应用程序。我设法找到了板的每个元素的轮廓。我怎样才能把它们剪下来,调整大小和组合,所以 tesseract ocr 可以完成它的工作并识别盘子中的文本。为了更清楚,我附上文章中的图片。在此处输入图像描述 在此处输入图像描述

标签: pythonopencvpython-tesseract

解决方案


这很简单。找到轮廓,遍历轮廓,找到每个轮廓的边界矩形,裁剪部分,调整裁剪部分的大小并将它们存储在列表中。然后,您可以迭代新列表并使用 numpy's 加入它们hstack。我已经分享了完整的代码,但是您需要一些过滤技术来删除多余的轮廓,所以请注意这一点。

代码:

import cv2
import numpy as np

img = cv2.imread('1.png',0)

image, contours, hierarchy = cv2.findContours(img.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

boxes = list()
cropped_imageList = list()

for c in contours:
    #if you want to store the original coordinates 
    x,y,w,h = cv2.boundingRect(c)
    boxes.append((x,y,w,h))
    #crop out the part of the image and resize
    crop_img = img[y:y+h, x:x+w]
    crop_img = cv2.resize(crop_img,(50,50))
    cropped_imageList.append(crop_img)

#join them back
imstack = cropped_imageList[0]

for imgs in cropped_imageList[1:]:
    imstack = np.hstack((imstack,imgs))

注意:这将随机加入找到的字母,解决此问题的一种方法是使用排序boxes列表x,y然后裁剪。

当 tesseract 可以直接检测到文本时,你为什么要做这一切?如果你想要更好的结果,你应该选择使用深度学习的现代方法。


推荐阅读