700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 机器视觉python-openCV实验—— 实验四 车牌识别实验

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

时间:2023-06-01 00:58:35

相关推荐

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

一、 实验目的

1. 掌握车牌识别原理;

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

二、实验要求

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

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

三、实验代码及结果

3.1 实验代码

# ———————— 实验四 ——————————————import cv2import 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 = 16h = w = r * 2 + 1kernel = 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 = 0max_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 = 0for m in mask:w1 += m / 255w2 = 0for n in w1:w2 += nif w2 > max_weight:max_index = imax_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 实验结果

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

结语

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

代码打包:

/download/qq_25662827/85465828/download/qq_25662827/85465828

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。