pyterresect的最后一个调用不是返回字符串,而是只返回该图像的每个像素的打印值。
import numpy as np
import cv2
import imutils
from PIL import Image
from pytesseract import image_to_string
count = 0
for c in cnts:
peri = cv2.arcLength(c, True)
approx = cv2.approxPolyDP(c, 0.02 * peri, True)
if len(approx) == 4: # Select the contour with 4 corners
NumberPlateCnt = approx #This is our approx Number Plate Contour
pl=NumberPlateCnt
print(NumberPlateCnt)
if(pl[0][0][1]+10>pl[2][0][1] or pl[0][0][0]+40>pl[2][0][0]):
continue
filter_img = image[pl[0][0][1]:pl[2][0][1],pl[0][0][0]:pl[2][0][0]]
print("Number Plate Detected")
cv2_imshow(filter_img)
Number=pytesseract.image_to_string(filter_img,lang='eng')
print("Number is :",Number)
cv2.waitKey(0)
cv2.drawContours(image, [NumberPlateCnt], -1, (0, 255, 0), 3)
print("Final Image With Number Plate Detected")
cv2_imshow(image)
cv2.waitKey(0) #Wait for user input before closing the images displayed
我在这里得到的数字应该是一些字符串,但它的打印就像我们在打印图像时得到的某种矩阵。
最佳答案
你得到的矩阵很可能来自这行代码:
print(NumberPlateCnt)
而
pytesseract.image_to_string
只是无法识别您试图获取的矩形轮廓上的任何文本,这意味着以下两行将为您打印空结果:Number=pytesseract.image_to_string(filter_img,lang='eng')
print("Number is :",Number)
由于您是在具有最大区域的轮廓上迭代,因此输出应该如下所示:
检测到牌照
号码是:
[223278]]
[[272279]]
[[274 282]]
[[224 281]]]
“数字是:”字符串只是空的,下面的矩阵结果将从下一次等高线计算迭代中得出。
要解决这个问题,可以检查PyTesseract返回的字符串是否包含任何内容,如下所示:
if (len(Number)):
print("Number is :", Number)
只有当它包含PyTesseract识别的符号时,它才会打印数字。
关于python - 车辆牌照OCR,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57622389/