python车牌识别定位

import cv2

使用的是HyperLPR已经训练好了的分类器

watch_cascade = cv2.CascadeClassifier(r’C:\Users\ASUS\Desktop\opencv_car\cascade.xml’)

先读取图片

def detectPlateRough(image_gray, resize_h=720, en_scale=1.08, top_bottom_padding_rate=0.05):

print("resize_h = ",resize_h)
count = 0
if top_bottom_padding_rate > 0.2:
    print("error:top_bottom_padding_rate > 0.2:", top_bottom_padding_rate)
    exit(1)
height = image_gray.shape[0]
padding = int(height * top_bottom_padding_rate)
print("padding = ", padding)
# scale = image_gray.shape[1] / float(image_gray.shape[0])
print("image_gray.shape[1] =",image_gray.shape[1])
# print("int(scale * resize_h) =", int(scale * resize_h))
image = cv2.resize(image_gray, (image_gray.shape[1], resize_h))

# 切掉图像上下各0.05*resize_h
image_color_cropped = image[padding:resize_h, 0:image_gray.shape[1]]
cv2.imshow("imageShow", image_color_cropped)
cv2.waitKey(0)

image_gray = cv2.cvtColor(image_color_cropped, cv2.COLOR_RGB2GRAY)

# 36,9 中36改的是列,9改的是行的最小值
watches = watch_cascade.detectMultiScale(image_gray, en_scale, 2, minSize=(36, 9), maxSize=(36 * 5, 9 * 5))
cropped_images = []

cv2.imwrite(str(count) + ".jpg", image_color_cropped, [int(cv2.IMWRITE_JPEG_QUALITY), 100])
for (x, y, w, h) in watches:
    # cv2.rectangle(image_color_cropped, (x, y), (x + w, y + h), (0, 0, 255), 1)

    x -= w * 0.14
    w += w * 0.28
    y -= h * 0.5
    h += h * 1
    print(x,w,y,h)
    # cv2.rectangle(image_color_cropped, (int(x), int(y)), (int(x + w), int(y + h)), (0, 0, 255), 1)

    cropped = cropImage(image_color_cropped, (int(x), int(y), int(w), int(h)))

    # 取出车牌图像
    cv2.imwrite(str(count) + ".jpg", cropped, [int(cv2.IMWRITE_JPEG_QUALITY), 100])
    count += 1
    # print("cropped.shape[0]",cropped.shape[0])
    # print("cropped.shape[1]", cropped.shape[1])


    cropped_images.append([cropped, [x, y + padding, w, h]])

return cropped_images

def cropImage(image, rect):
# cv2.imshow(“imageShow”, image)
# cv2.waitKey(0)
x, y, w, h = computeSafeRegion(image.shape, rect)
cv2.imshow(“imageShow”, image[y:y + h, x:x + w])
cv2.waitKey(0)

return image[y:y + h, x:x + w]

def computeSafeRegion(shape, bounding_rect):
top = bounding_rect[1] # y
bottom = bounding_rect[1] + bounding_rect[3] # y + h
left = bounding_rect[0] # x
right = bounding_rect[0] + bounding_rect[2] # x + w
min_top = 0
max_bottom = shape[0]
min_left = 0
max_right = shape[1]

# print(left,top,right,bottom)
# print(max_bottom,max_right)

if top < min_top:
    top = min_top
if left < min_left:
    left = min_left
if bottom > max_bottom:
    bottom = max_bottom
if right > max_right:
    right = max_right
return [left, top, right - left, bottom - top]

image = cv2.imread(r"C:\Users\ASUS\Desktop\222.jpg")
images = detectPlateRough(image, image.shape[0], top_bottom_padding_rate=0.1)

print(“检测到车牌数”, len(images))

https://blog.csdn.net/ctwy291314/article/details/80893455

你可能感兴趣的:(学习笔记,opencv,python)