Python车牌识别、车牌抓取源程序,运行程序前需先导入cv2和numpy包。

import cv2 as cv
import numpy as np# 找出最有可能是车牌的位置
def getSatifyestBox(list_rate):for index, key in enumerate(list_rate):list_rate[index] = abs(key - 3)index = list_rate.index(min(list_rate))  # index函数作用是:若list_rate中存在index括号中的内容,则返回括号内字符串的索引值return indexdef location(img):# 读取图片并统一尺寸img_resize = cv.resize(img, (640, 480), )# 高斯模糊+中值滤波img_gaus = cv.GaussianBlur(img_resize, (5, 5), 0)  # 高斯模糊img_med = cv.medianBlur(img_gaus, 5)  # 中值滤波# HSV模型处理,直至二值化# 转换为HSV模型img_hsv = cv.cvtColor(img_med, cv.COLOR_BGR2HSV)  # hsv模型lower_blue = np.array([100, 40, 50])higher_blue = np.array([140, 255, 255])mask = cv.inRange(img_hsv, lower_blue, higher_blue)  # 掩膜操作img_res = cv.bitwise_and(img_med, img_med, mask=mask)# 灰度化+二值化img_gray_h = cv.cvtColor(img_res, cv.COLOR_BGR2GRAY)  # 转换了灰度化ret1, img_thre_h = cv.threshold(img_gray_h, 0, 255, cv.THRESH_BINARY + cv.THRESH_OTSU)# 进行Sobel算子运算,直至二值化img_gray_s = cv.cvtColor(img_med, cv.COLOR_BGR2GRAY)# sobel算子运算img_sobel_x = cv.Sobel(img_gray_s, cv.CV_32F, 1, 0, ksize=3)  # x轴Sobel运算img_sobel_y = cv.Sobel(img_gray_s, cv.CV_32F, 0, 1, ksize=3)img_ab_y = np.uint8(np.absolute(img_sobel_y))img_ab_x = np.uint8(np.absolute(img_sobel_x))  # 像素点取绝对值img_ab = cv.addWeighted(img_ab_x, 0.5, img_ab_y, 0.5, 0)  # 将两幅图像叠加在一起(按一定权值)# 考虑再加一次高斯去噪img_gaus_1 = cv.GaussianBlur(img_ab, (5, 5), 0)  # 高斯模糊# 二值化操作ret2, img_thre_s = cv.threshold(img_gaus_1, 0, 255, cv.THRESH_BINARY + cv.THRESH_OTSU)  # 正二值化# 颜色空间与边缘算子的图像互相筛选# 同时遍历两幅二值图片,若两者均为255,则置255img_1 = np.zeros(img_thre_h.shape, np.uint8)  # 重新拷贝图片height = img_resize.shape[0]  # 行数width = img_resize.shape[1]  # 列数for i in range(height):for j in range(width):h = img_thre_h[i][j]s = img_thre_s[i][j]if h == 255 and s == 255:img_1[i][j] = 255else:img_1[i][j] = 0# cv.imshow('threshold',img_1)# cv.waitKey(0)# 二值化后的图像进行闭操作kernel = np.ones((14, 18), np.uint8)img_close = cv.morphologyEx(img_1, cv.MORPH_CLOSE, kernel)  # 闭操作img_med_2 = cv.medianBlur(img_close, 5)# cv.imshow('close',img_med_2)# cv.waitKey(0)# 查找轮廓regions = []  # 区域list_rate = []img_input = img_med_2.copy()contours, hierarchy = cv.findContours(img_input, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)#   筛选面积最小的for contour in contours:# 计算该轮廓的面积area = cv.contourArea(contour)# 面积小的都筛选掉if area < 2000:continue# 轮廓近似,epsilon,是从轮廓到近似轮廓的最大距离。是一个准确率参数,好的epsilon的选择可以得到正确的输出。True决定曲线是否闭合。epslion = 1e-3 * cv.arcLength(contour, True)approx = cv.approxPolyDP(contour, epslion, True)  # 曲线折线化# 找到最小的矩形,该矩形可能有方向rect = cv.minAreaRect(contour)# box是四个点的坐标box = cv.boxPoints(rect)box = np.int0(box)# 计算高和宽height = abs(box[0][1] - box[2][1])width = abs(box[0][0] - box[2][0])# 车牌正常情况下长高比为2-5之间(精确一点可为(2.2,3.6))ratio = float(width) / float(height)if ratio > 2 and ratio < 5:regions.append(box)list_rate.append(ratio)# 输出车牌的轮廓print('[INF0]:Detect %d license plates' % len(regions))  # 输出疑似车牌图块的数量index = getSatifyestBox(list_rate)region = regions[index]# 用绿线画出这些找到的轮廓# 重新申请空间拷贝,因为drawcontours会改变原图片img_2 = np.zeros(img_resize.shape, np.uint8)img_2 = img_resize.copy()cv.drawContours(img_2, [region], 0, (0, 255, 0), 2)# cv.imshow('result',img_2)# cv.waitKey(0)# 定位后需对车牌图像做后面的字符分割等处理,因此需要将车牌图块单独截取出来,截取轮廓Xs = [i[0] for i in region]YS = [i[1] for i in region]x1 = min(Xs)x2 = max(Xs)y1 = min(YS)y2 = max(YS)height_1 = y2 - y1width_1 = x2 - x1img_crop = img_resize[y1:y1 + height_1, x1:x1 + width_1]# cv.imshow('resultcut',img_crop)# cv.waitKey(0)# 后面是自己的一些想法,希望能够对截取到的车牌图块再细致处理一下,使其仅保留车牌部分,但作用貌似也不大(苦笑)# 假设再进行一次HSVimg_hsv_1 = cv.cvtColor(img_crop, cv.COLOR_BGR2HSV)  # hsv模型lower_blue_1 = np.array([100, 90, 90])higher_blue_1 = np.array([140, 255, 255])mask_1 = cv.inRange(img_hsv_1, lower_blue_1, higher_blue_1)  # 掩膜操作img_res_1 = cv.bitwise_and(img_crop, img_crop, mask=mask_1)# 灰度化+二值化img_gray_1 = cv.cvtColor(img_res_1, cv.COLOR_BGR2GRAY)  # 转换了灰度化ret3, img_thre_1 = cv.threshold(img_gray_1, 0, 255, cv.THRESH_BINARY + cv.THRESH_OTSU)height_2 = img_thre_1.shape[0]  # 获得行数width_2 = img_thre_1.shape[1]  # 获得列数white_min = []white_max = []a = 0b = 0# 从每行开始遍历,记录每行第一个及最后一个白色像素点的列数for i in range(height_2):for j in range(width_2):h = img_thre_1[i, j]if h == 255:a = jwhite_min.append(a)breaka = min(white_min)for q in range(height_2 - 1, -1, -1):for w in range(width_2 - 1, -1, -1):ps = img_thre_1[q, w]if ps == 255:b = wwhite_max.append(b)breakb = max(white_max)white_min1 = []white_max1 = []c = 0d = 0# 从每一列开始遍历,记录每一行第一个白色像素点及最后一个像素点的行数for i in range(width_2):for j in range(height_2):h = img_thre_1[j, i]if h == 255:c = jwhite_max1.append(c)breakc = min(white_max1)for q in range(width_2 - 1, -1, -1):for w in range(height_2 - 1, -1, -1):ps = img_thre_1[w, q]if ps == 255:d = wwhite_min1.append(d)breakd = max(white_min1)img_cut = img_crop[c:d, a:b]# cv.imshow('final',img_cut)# cv.waitKey(0)return img_cutif __name__ == "__main__":img = cv.imread("chepai.png")  # 输入自己的图片#cv.imshow("plate", img)cv.waitKey(0)img_p = location(img)cv.imshow("plate", img_p)cv.waitKey(0)

更多Python源代码,请微信关注:Python代码大全,

Python车牌识别、车牌抓取源代码相关推荐

  1. python爬取百度贴吧中的所有邮箱_使用 Python 编写多线程爬虫抓取百度贴吧邮箱与手机号...

    原标题:使用 Python 编写多线程爬虫抓取百度贴吧邮箱与手机号 不知道大家过年都是怎么过的,反正栏主是在家睡了一天,醒来的时候登QQ发现有人找我要一份贴吧爬虫的源代码,想起之前练手的时候写过一个抓 ...

  2. python爬虫代码房-Python爬虫一步步抓取房产信息

    原标题:Python爬虫一步步抓取房产信息 前言 嗯,这一篇文章更多是想分享一下我的网页分析方法.玩爬虫也快有一年了,基本代码熟悉之后,我感觉写一个爬虫最有意思的莫过于研究其网页背后的加载过程了,也就 ...

  3. Python利用bs4批量抓取网页图片并下载保存至本地

    Python利用bs4批量抓取网页图片并下载保存至本地 使用bs4抓取网页图片,bs4解析比较简单,需要预先了解一些html知识,bs4的逻辑简单,编写难度较低.本例以抓取某壁纸网站中的壁纸为例.(b ...

  4. python将视频像素抓取替换导出mosaic效果的文本视频

    python将视频像素抓取替换导出mosaic效果的文本视频 第一次写博客,关于python的. 全网关于这种视频的的合成代码几乎没有,所以我提供了一套这样的思路. 完成过程很痛苦.因为全网类似的太少 ...

  5. jupyter分割代码块_科研分享—Python根据关键词自动抓取Pubmed文献标题(附全部代码)文末有福利...

    写在前面:接触Python应该是8月初的一篇公众号文章,大致内容是使用py爬取数据库并汇总到本地.正好手头需要对某个领域的文献进行调研,不妨学习一下. 什么是Python? 百度说:Python (计 ...

  6. python beautifulsoup抓取网页内容_利用Python和Beautiful Soup抓取网页内容

    利用Python和Beautiful Soup抓取网页内容 Posted on 2012-08-09 00:08 SamWei 阅读(381) 评论(1) 编辑 收藏 Python 3中提供了url打 ...

  7. Python爬虫项目:抓取智联招聘信息

    来自https://mp.weixin.qq.com/s/0SzLGqv2p0-IWSN3r8bOHA ''' Python爬虫之五:抓取智联招聘基础版 该文件运行后会产生一个代码,保存在这个Pyth ...

  8. 通过Python爬虫按关键词抓取相关的新闻

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途 如今各大网站的反爬机制已经可以说是到了丧心病狂的程度,比如大众点评的字符加密.微博的登录验证等.相比较而言,新闻网站的反爬机制 ...

  9. 用python通过selenium自动化测试抓取天猫店铺数据

    用python通过selenium自动化测试抓取天猫店铺数据 运行的环境在win10,软件用的是vscode.大家平常在抓取天猫店铺的时候登陆后会需要验证,我的方法是通过谷歌插件跳过天猫的登陆. 首先 ...

  10. python爬虫妹子图抓取

    python爬虫妹子图抓取 目标网址:图片地址 我的github地址:超链接 可以自行感受一下,我就不说了,重点是学习代码,不是图片 #! /usr/bin/python3 # -*- coding: ...

最新文章

  1. Nature综述: 宏基因组关联分析-深入研究微生物组
  2. 博客基础_django_python从入门到实践_创建项目_创建应用
  3. What‘s new in dubbo-go v1.5.6
  4. 橡皮擦_日本推出改邪归正橡皮擦,看得我头顶一凉
  5. linux-x86_64 error,Linux-x86_64 Error: 5: Input/output error的问题
  6. 很有趣的Java分形绘制
  7. 电子电工产品IP防水测试及测试设备
  8. PCB制作仿真、自制51板测试及性能改进
  9. Linux 常用网络命令大全
  10. 如何拯救k8s镜像分发的阿喀琉斯之踵
  11. 修改Windows系统注册表并使其立即生效
  12. html5梯形图形代码,CSS秘密花园:梯形标签
  13. 两个三维图像互信息python_含有两个数字的词语
  14. NAS HomeAssistant
  15. 【Plant Biotech. J.】DcMYB113可调节胡萝卜中花青素的生物合成和修饰
  16. 计算机ir领域,IR领域的相关等级会议和期刊
  17. 国务院办公厅:多处强调“电子签名、电子印章、电子合同”的应用
  18. 复变函数与积分变换(五)学习笔记[孤立奇点,留数,零点与奇点,无穷远点的留数,留数计算的应用]
  19. Linux Oracle dbf文件误删 恢复操作
  20. Adobe Flash Player 29.0.0.140官方正式版

热门文章

  1. 广东汕尾电信稳定dns服务器,广东电信的DNS是多少?
  2. 佳能打印机扫描文件到电脑显示设置计算机,佳能打印机办公用哪个型号好 佳能打印机扫描文件到电脑步骤【详解】...
  3. 打印机扫描计算机远程扫描仪,怎么用打印机扫描文件-彩色网络打印机扫描设置FTP版...
  4. cpu使用率100%,内存占用不足30%,system进程 pId=4
  5. Linux 服务器CPU占用率100%,使用率高解决方案
  6. SpringCloud使用Feign调用第三方接口
  7. MotorSolve(电机设计软件)v5.1绿色中文版
  8. 如何巧妙的申请换部门_职场:如何跟领导提调换工作岗位?这几点你要考虑清楚!...
  9. 华为网络篇 华为路由器的初始化配置-05
  10. 文本挖掘--LTP-cloud 分词