机器视觉python-openCV实验—— 实验四 车牌识别实验

一、 实验目的

1. 掌握车牌识别原理;

2. 掌握利用Python-OpenCV进行编程实现车牌识别的方法

二、实验要求

1. 利用Matlab对标准车牌图像和自建车牌图像进行识别;

2. 认真撰写实验报告,要求说明实验原理,对实验过程叙述清楚,关键代码给出注释,对实验结果给出合理解释,实验分析部分则需要指出实验结果优劣的原因以及如何进一步提高实验性能的方法或手段

三、实验代码及结果

3.1 实验代码

# ———————— 实验四 ——————————————
import cv2
import numpy as np

#二值化
def binaryzation(img):
    maxi = float(img.max())
    mini = float(img.min())
    x = maxi - ((maxi - mini) / 2)
    ret, thresh = cv2.threshold(img, x, 255, cv2.THRESH_BINARY)
    return thresh

#找到能够包围给定区块的最小矩形的左下角坐标(min(x),min(y))与右上角坐标(max(x),max(y))
def find_rectangle(contour):
    x = []
    y = []
    for p in contour:
        y.append(p[0][0])
        x.append(p[0][1])
    return [min(y), min(x), max(y), max(x)]
#读取图片
img = cv2.imread(r".\test4.jpeg")
cv2.imshow('initial image', img)
m = 400 * img.shape[0] / img.shape[1]
#调整图像尺寸
img = cv2.resize(img, (400, int(m)), interpolation = cv2.INTER_AREA)
#转化为灰度图
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#结构元素(kernel)为半径为16的圆
r = 16
h = w = r * 2 + 1
kernel = np.zeros((h, w), np.uint8)
cv2.circle(kernel, (r, r), r, 1, -1)
#开运算
open_img = cv2.morphologyEx(gray_img, cv2.MORPH_OPEN, kernel)
#顶帽
hat_img = cv2.absdiff(gray_img, open_img)
#图像二值化
binary_img = binaryzation(hat_img)
#canny边缘检测
canny = cv2.Canny(binary_img, binary_img.shape[0], binary_img.shape[1])
#闭运算核
kernel = np.ones((5, 19), np.uint8)
#闭运算
close_img = cv2.morphologyEx(canny, cv2.MORPH_CLOSE, kernel)
#开运算
open_img = cv2.morphologyEx(close_img, cv2.MORPH_OPEN, kernel)
#更换结构元素
kernel = np.ones((11, 5), np.uint8)
#开运算
open_img = cv2.morphologyEx(open_img, cv2.MORPH_OPEN, kernel)
#提取轮廓
contours, hierarchy = cv2.findContours(open_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
#存储每个块的矩形坐标
block = []
for c in contours:
    r = find_rectangle(c)
    block.append(r)

max_weight = 0
max_index = -1
#遍历分割出来的各个区域
for i in range(len(block)):
    b = img[block[i][1] : block[i][3], block[i][0] : block[i][2]]
    #转化为hsv颜色空间
    hsv = cv2.cvtColor(b, cv2.COLOR_BGR2HSV)
    #蓝色下界
    lower = np.array([100, 50, 50])
    #蓝色上界
    upper = np.array([140, 255, 255])
    #利用掩膜进行筛选
    mask = cv2.inRange(hsv, lower, upper)
    #计算当前区域的满足情况
    w1 = 0
    for m in mask:
        w1 += m / 255
    w2 = 0
    for n in w1:
        w2 += n
    if w2 > max_weight:
        max_index = i
        max_weight = w2
#最可能为车牌的区域对应的矩形坐标
rect = block[max_index]
#画框
cv2.rectangle(img, (rect[0], rect[1]), (rect[2], rect[3]),(0, 255, 0), 2)
cv2.imshow('result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

3.2 实验结果

运行代码后,会打开目标图片,经过处理后图像会缩放变小,并框出车牌位置


结语

这是本人大学期间机器视觉实验报告。顺走的记得改改图片,报告内容也稍作修改、排版也别跟一样好吧。

代码打包:

https://download.csdn.net/download/qq_25662827/85465828icon-default.png?t=M4ADhttps://download.csdn.net/download/qq_25662827/85465828

  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星羽空间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值