![](/img/trans.png)
[英]Extract numbers and letters from license plate image with Python OpenCV
[英]Reading license plate from image using OpenCV Python and Tesseract
我有一個問題,因為我有單獨的照片注冊。 現在我想從照片中獲取注冊號。 不幸的是,我寫的代碼效率很低,我想尋求幫助以實現更高的效率。 有小費嗎?
在第一階段,照片看起來像這樣
然后將照片轉換為灰色,只有黑色對比
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# define range of black color in HSV
lower_val = np.array([0,0,0])
upper_val = np.array([179,100,130])
# Threshold the HSV image to get only black colors
mask = cv2.inRange(hsv, lower_val, upper_val)
收到
我可以添加什么或做什么來提高程序的有效性。 有沒有辦法讓程序稍微檢索注冊? 這會幫助嗎
configr = ('-l eng --oem 1 --psm 6-c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
text = pytesseract.image_to_string(mask,lang='eng', config=configr)
print(text)
這是一種方法:
提取黑色文本的顏色閾值。 我們加載圖像,轉換為 HSV 顏色空間,定義上下顏色范圍,並使用cv2.inRange()
顏色閾值並獲得二值掩碼
進行形態學操作。 創建一個內核並執行變形接近以填充輪廓中的孔。
過濾車牌輪廓。 使用邊界矩形區域查找輪廓和過濾器。 如果輪廓通過此過濾器,我們將提取 ROI 並將其粘貼到新的空白蒙版上。
使用 Pytesseract 進行 OCR。 我們反轉圖像,使所需的文本為黑色,然后將其放入 Pytesseract。
這是每個步驟的可視化:
從顏色閾值+變形閉合獲得蒙版
過濾以綠色突出顯示的車牌輪廓
將板輪廓粘貼到空白掩模上
為 Tesseract 准備的倒置圖像
Tesseract OCR 的結果
PZ 689LR
代碼
import numpy as np
import pytesseract
import cv2
pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"
# Load image, create blank mask, convert to HSV, define thresholds, color threshold
image = cv2.imread('1.png')
result = np.zeros(image.shape, dtype=np.uint8)
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
lower = np.array([0,0,0])
upper = np.array([179,100,130])
mask = cv2.inRange(hsv, lower, upper)
# Perform morph close and merge for 3-channel ROI extraction
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
close = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel, iterations=1)
extract = cv2.merge([close,close,close])
# Find contours, filter using contour area, and extract using Numpy slicing
cnts = cv2.findContours(close, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
for c in cnts:
x,y,w,h = cv2.boundingRect(c)
area = w * h
if area < 5000 and area > 2500:
cv2.rectangle(image, (x, y), (x + w, y + h), (36,255,12), 3)
result[y:y+h, x:x+w] = extract[y:y+h, x:x+w]
# Invert image and throw into Pytesseract
invert = 255 - result
data = pytesseract.image_to_string(invert, lang='eng',config='--psm 6')
print(data)
cv2.imshow('image', image)
cv2.imshow('close', close)
cv2.imshow('result', result)
cv2.imshow('invert', invert)
cv2.waitKey()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.