如何解决我如何按照与车牌相同的顺序排列 2 行输出
我正在创建一个车牌识别器,我的车牌输入是单行和双行。代码适用于单行。它也能识别双排板的字符,但不能像图像那样排列字符。这是图片 license plate for recognition 和代码`
import pytesseract
import cv2
# If you don't have tesseract executable in your PATH,include the following:z
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files (x86)\Tesseract-OCR\tesseract.exe'
# point to license plate image (works well with custom crop function)
img = cv2.imread('3.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)
blur = cv2.GaussianBlur(gray,(3,3),0)
gray = cv2.medianBlur(gray,3)
# perform otsu thresh (using binary inverse since opencv contours work better with white text)
ret,thresh = cv2.threshold(blur,255,cv2.THRESH_OTSU | cv2.THRESH_BINARY_INV)
#cv2.imshow("Otsu",thresh)
#cv2.waitKey(0)
rect_kern = cv2.getStructuringElement(cv2.MORPH_RECT,3))
# apply dilation
dilation = cv2.dilate(thresh,rect_kern,iterations = 1)
#cv2.imshow("dilation",dilation)
#cv2.waitKey(0)
# find contours
try:
contours,hierarchy = cv2.findContours(dilation,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
except:
ret_img,contours,cv2.CHAIN_APPROX_SIMPLE)
sorted_contours = sorted(contours,key=lambda ctr: cv2.boundingRect(ctr)[0])
# create copy of image
im2 = gray.copy()
plate_num = ""
# loop through contours and find letters in license plate
for cnt in sorted_contours:
x,y,w,h = cv2.boundingRect(cnt)
height,width = im2.shape
# if height of box is not a quarter of total height then skip
if height / float(h) > 6: continue
ratio = h / float(w)
# if height to width ratio is less than 1.5 skip
if ratio < 1.5: continue
area = h * w
# if width is not more than 25 pixels skip
if width / float(w) > 15: continue
# if area is less than 100 pixels skip
if area < 100: continue
# draw the rectangle
rect = cv2.rectangle(im2,(x,y),(x+w,y+h),(0,0),2)
roi = thresh[y-5:y+h+5,x-5:x+w+5]
roi = cv2.bitwise_not(roi)
roi = cv2.medianBlur(roi,5)
#cv2.imshow("ROI",roi)
#cv2.waitKey(0)
text = pytesseract.image_to_string(roi,config='-c tessedit_char_whitelist=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ --psm 8 --oem 3')
#print(text)
plate_num += text
print(plate_num)
cv2.imshow("Character's Segmented",im2)
cv2.waitKey(0)
cv2.destroyAllWindows()
` 它以这种形式提供输出: 5
L
7
E
0
B
0
我希望输出为:LEB 5700
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。