python - 图像中的 Concat 轮廓
问题描述
我正在制作车牌识别应用程序。我设法找到了板的每个元素的轮廓。我怎样才能把它们剪下来,调整大小和组合,所以 tesseract ocr 可以完成它的工作并识别盘子中的文本。为了更清楚,我附上文章中的图片。
解决方案
这很简单。找到轮廓,遍历轮廓,找到每个轮廓的边界矩形,裁剪部分,调整裁剪部分的大小并将它们存储在列表中。然后,您可以迭代新列表并使用 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 可以直接检测到文本时,你为什么要做这一切?如果你想要更好的结果,你应该选择使用深度学习的现代方法。
推荐阅读
- javascript - 慢得离谱的 Apps-Script 循环
- java - android studio 没有执行代码并抛出错误说“任务':app:compileDebugJavaWithJavac'的执行失败”
- javascript - 部署通过 expressjs 提供的反应应用程序时出现内部服务器错误 403
- amazon-web-services - 如何在 AWS Lightsail 中设置反向 DNS?
- sql - 过去 14 天与过去 14 天之前的数据
- amazon-web-services - DynamoDB:对于大量记录,BatchWriteItem 使用的写入计算单元是否比 PutItem 少?
- arrays - 读取字符串数组中的字符串时出现分段错误
- java - Java swing setLocation / setSize 不适用于 JPanel
- python - 枕头仅水平居中图像上的文本
- c++ - 如果未给出,则在文件名中附加文件扩展名,在 C++ 中