目录

1.调整图片大小,并获取灰度图

2.双边滤波去除噪音:cv2.bilateralFilter()。

3.边缘检测:cv2.Canny(image,threshold1,threshold2)

4.寻找轮廓:车牌(四边形)

​编辑 5.图像位运算进行遮罩

6.图像剪裁

7.字符识别:OCR


1.调整图片大小,并获取灰度图

import cv2if __name__ == '__main__':img = cv2.imread('2.jpeg')# 调整图片大小img = cv2.resize(img, (620, 480))# 灰度图gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 显示效果cv2.imshow('original', img)cv2.waitKey(0)cv2.destroyAllWindows()

2.双边滤波去除噪音:cv2.bilateralFilter()。

import cv2if __name__ == '__main__':img = cv2.imread('2.jpeg')# 调整图片大小img = cv2.resize(img, (620, 480))# 灰度图gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 双边滤波gray1 = cv2.bilateralFilter(gray, 13, 15, 15)# 显示效果cv2.imshow('gray', gray)cv2.imshow('bilateralFilter', gray1)cv2.waitKey(0)cv2.destroyAllWindows()

3.边缘检测:cv2.Canny(image,threshold1,threshold2)

仅显示强度梯度大于最小阈值threshold1且小于最大阈值threshold2的边缘。

import cv2if __name__ == '__main__':img = cv2.imread('2.jpeg')# 调整图片大小img = cv2.resize(img, (620, 480))# 灰度图gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 双边滤波gray = cv2.bilateralFilter(gray, 13, 15, 15)# 边缘检测edged = cv2.Canny(gray, 30, 200)# 显示效果cv2.imshow('gray', gray)cv2.imshow('edged', edged)cv2.waitKey(0)cv2.destroyAllWindows()

4.寻找轮廓:车牌(四边形)

pip install imutils
import cv2
import imutilsif __name__ == '__main__':img = cv2.imread('2.jpeg')# 调整图片大小img = cv2.resize(img, (620, 480))# 灰度图gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 双边滤波gray = cv2.bilateralFilter(gray, 13, 15, 15)# 边缘检测edged = cv2.Canny(gray, 30, 200)# 寻找轮廓(图像矩阵,输出模式,近似方法)contours = cv2.findContours(edged.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)# 配合上面一句使用:用来兼容cv2和cv3contours = imutils.grab_contours(contours)# 根据区域大小排序取前十个contours = sorted(contours, key=cv2.contourArea, reverse=True)[:10]screenCnt = None# 遍历轮廓,找到车牌轮廓for c in contours:# 计算轮廓周长(轮廓,是否闭合)peri = cv2.arcLength(c, True)# 折线化(轮廓,阈值(越小越接近曲线),是否闭合)返回折线顶点坐标approx = cv2.approxPolyDP(c, 0.018 * peri, True)# 获取四个顶点(即四边形)if len(approx) == 4:screenCnt = approxbreak# 如果找到了四边形if screenCnt is not None:# 根据四个顶点坐标对img画线(图像矩阵,轮廓坐标集,轮廓索引,颜色,线条粗细)cv2.drawContours(img, [screenCnt], -1, (0, 0, 255), 3)# 显示效果cv2.imshow('img', img)cv2.imshow('gray', gray)cv2.imshow('edged', edged)cv2.waitKey(0)cv2.destroyAllWindows()

 5.图像位运算进行遮罩

import cv2
import imutils
import numpy as npif __name__ == '__main__':img = cv2.imread('2.jpeg')# 调整图片大小img = cv2.resize(img, (620, 480))# 灰度图gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 双边滤波gray = cv2.bilateralFilter(gray, 13, 15, 15)# 边缘检测edged = cv2.Canny(gray, 30, 200)"""寻找轮廓(图像矩阵,输出模式,近似方法)"""contours = cv2.findContours(edged.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)# 配合上面一句使用:用来兼容cv2和cv3contours = imutils.grab_contours(contours)# 根据区域大小排序取前十个contours = sorted(contours, key=cv2.contourArea, reverse=True)[:10]screenCnt = None# 遍历轮廓,找到车牌轮廓for c in contours:# 计算轮廓周长(轮廓,是否闭合)peri = cv2.arcLength(c, True)# 折线化(轮廓,阈值(越小越接近曲线),是否闭合)返回折线顶点坐标approx = cv2.approxPolyDP(c, 0.018 * peri, True)# 获取四个顶点(即四边形)if len(approx) == 4:screenCnt = approxbreak# 如果找到了四边形if screenCnt is not None:# 根据四个顶点坐标对img画线(图像矩阵,轮廓坐标集,轮廓索引,颜色,线条粗细)cv2.drawContours(img, [screenCnt], -1, (0, 0, 255), 3)"""遮罩"""# 创建一个灰度图一样大小的图像矩阵mask = np.zeros(gray.shape, np.uint8)# 将创建的图像矩阵的车牌区域画成白色cv2.drawContours(mask, [screenCnt], 0, 255, -1, )# 图像位运算进行遮罩new_image = cv2.bitwise_and(img, img, mask=mask)# 显示效果cv2.imshow('img', img)cv2.imshow('gray', gray)cv2.imshow('edged', edged)cv2.imshow('new_image', new_image)cv2.waitKey(0)cv2.destroyAllWindows()

6.图像剪裁

import cv2
import imutils
import numpy as npif __name__ == '__main__':img = cv2.imread('2.jpeg')# 调整图片大小img = cv2.resize(img, (620, 480))# 灰度图gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 双边滤波gray = cv2.bilateralFilter(gray, 13, 15, 15)# 边缘检测edged = cv2.Canny(gray, 30, 200)"""寻找轮廓(图像矩阵,输出模式,近似方法)"""contours = cv2.findContours(edged.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)# 配合上面一句使用:用来兼容cv2和cv3contours = imutils.grab_contours(contours)# 根据区域大小排序取前十个contours = sorted(contours, key=cv2.contourArea, reverse=True)[:10]screenCnt = None# 遍历轮廓,找到车牌轮廓for c in contours:# 计算轮廓周长(轮廓,是否闭合)peri = cv2.arcLength(c, True)# 折线化(轮廓,阈值(越小越接近曲线),是否闭合)返回折线顶点坐标approx = cv2.approxPolyDP(c, 0.018 * peri, True)# 获取四个顶点(即四边形)if len(approx) == 4:screenCnt = approxbreak# 如果找到了四边形if screenCnt is not None:# 根据四个顶点坐标对img画线(图像矩阵,轮廓坐标集,轮廓索引,颜色,线条粗细)cv2.drawContours(img, [screenCnt], -1, (0, 0, 255), 3)"""遮罩"""# 创建一个灰度图一样大小的图像矩阵mask = np.zeros(gray.shape, np.uint8)# 将创建的图像矩阵的车牌区域画成白色cv2.drawContours(mask, [screenCnt], 0, 255, -1, )# 图像位运算进行遮罩new_image = cv2.bitwise_and(img, img, mask=mask)"""图像剪裁"""# 获取车牌区域的所有坐标点(x, y) = np.where(mask == 255)# 获取底部顶点坐标(topx, topy) = (np.min(x), np.min(y))# 获取底部坐标(bottomx, bottomy,) = (np.max(x), np.max(y))# 剪裁Cropped = gray[topx:bottomx, topy:bottomy]# 显示效果cv2.imshow('img', img)cv2.imshow('gray', gray)cv2.imshow('edged', edged)cv2.imshow('Cropped', Cropped)cv2.waitKey(0)cv2.destroyAllWindows()

7.字符识别:OCR

import cv2
import imutils
import numpy as npif __name__ == '__main__':img = cv2.imread('2.jpeg')# 调整图片大小img = cv2.resize(img, (620, 480))# 灰度图gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 双边滤波gray = cv2.bilateralFilter(gray, 13, 15, 15)# 边缘检测edged = cv2.Canny(gray, 30, 200)"""寻找轮廓(图像矩阵,输出模式,近似方法)"""contours = cv2.findContours(edged.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)# 配合上面一句使用:用来兼容cv2和cv3contours = imutils.grab_contours(contours)# 根据区域大小排序取前十个contours = sorted(contours, key=cv2.contourArea, reverse=True)[:10]screenCnt = None# 遍历轮廓,找到车牌轮廓for c in contours:# 计算轮廓周长(轮廓,是否闭合)peri = cv2.arcLength(c, True)# 折线化(轮廓,阈值(越小越接近曲线),是否闭合)返回折线顶点坐标approx = cv2.approxPolyDP(c, 0.018 * peri, True)# 获取四个顶点(即四边形)if len(approx) == 4:screenCnt = approxbreak# 如果找到了四边形if screenCnt is not None:# 根据四个顶点坐标对img画线(图像矩阵,轮廓坐标集,轮廓索引,颜色,线条粗细)cv2.drawContours(img, [screenCnt], -1, (0, 0, 255), 3)"""遮罩"""# 创建一个灰度图一样大小的图像矩阵mask = np.zeros(gray.shape, np.uint8)# 将创建的图像矩阵的车牌区域画成白色cv2.drawContours(mask, [screenCnt], 0, 255, -1, )# 图像位运算进行遮罩new_image = cv2.bitwise_and(img, img, mask=mask)"""图像剪裁"""# 获取车牌区域的所有坐标点(x, y) = np.where(mask == 255)# 获取底部顶点坐标(topx, topy) = (np.min(x), np.min(y))# 获取底部坐标(bottomx, bottomy,) = (np.max(x), np.max(y))# 剪裁Cropped = gray[topx:bottomx, topy:bottomy]"""OCR识别"""text = pytesseract.image_to_string(Cropped, config='--psm 11')print("车牌结果:", text)# 显示效果cv2.imshow('img', img)cv2.imshow('gray', gray)cv2.imshow('edged', edged)cv2.imshow('new_image', Cropped)cv2.waitKey(0)cv2.destroyAllWindows()

OpenCV第七篇:车牌识别相关推荐

  1. OpenCV学习案例之车牌识别EasyPR

    OpenCV学习案例之车牌识别easyPR 起始 github上开源中文车牌识别库比较少: HyperLPR,基于深度学习高性能中文车牌识别库,支持python.c++, 可以在Android,Lin ...

  2. OpenCV(项目)车牌识别1 -- 车牌提取(形态学)

    目录 一.形态学车牌提取(简单:单情景) 1.读取图片,转灰度图 2.提取轮廓(Sobel算子提取y方向边缘) 3.自适应二值化 4.闭运算处理,把图像闭合.揉团,使图像区域化 5.腐蚀/膨胀去噪得到 ...

  3. OpenCV(项目)车牌识别4 -- 总结篇

    目录 一.效果 1.成功案例 2.经典失败案例(单字符识别成类似字符) 3.其他失败案例 二.总结 三.车牌识别总代码 一.效果 1.成功案例 2.经典失败案例(单字符识别成类似字符) 3.其他失败案 ...

  4. 从零使用OpenCV快速实现简单车牌识别系统

    这篇文章献给所有第一次听说车牌识别ANPR但需要短时间实现的苦逼同学们. 最近的小学期实训做的是一个车牌识别系统,说实话真不知道学校怎么想的,虽然说图像处理也算的上是数字媒体很重要的一块分支了,但咱这 ...

  5. OpenCV(项目)车牌识别2 -- 车牌字符分割(直方图)

    目录 试错 1.没有膨胀/膨胀过小:无法连接上单个字符. 2.膨胀过大:错误连接相邻字符. 一.直方图处理原理 1.横向分割 2.纵向分割 过程: 一.中值滤波.灰度化 二.二值化(统一黑底白字) 三 ...

  6. 【OpenCV+Qt】使用车牌识别系统EasyPR识别车牌号

    EasyPR是一个中文的开源车牌识别系统,其车牌识别划分为了两个过程:即车牌检测(Plate Detection)和字符识别(Chars Recognition)两个过程: 车牌检测(Plate De ...

  7. mvcnn代码详解_Tensorflow,OpenCV实现的CNN车牌识别代码

    [实例简介] 某位大牛在github上分享的 CNN 车牌识别源代码,在将其装到Windows的Python下运行时碰到了各种报错(WIN8下python3.6,Opencv3.0),有些问题搜遍网络 ...

  8. OpenCV(项目)车牌识别3 -- 模板匹配

    目录 一.基础理论 1.思想 2.大致过程 二.详细过程 1.首先需要模板库 2.得到模板 3.原图限定大小 4.模板匹配 5.匹配所有子文件夹,保存最佳得分(最匹配项) 三.大致过程(细分类,节省时 ...

  9. 【树莓派开发】02-基于OpenCV的车牌识别处理(LPR)

    [说明]:疫情期间比较闲学习了python.LPR这个东西,基于OpenCV已经做过很多遍了,通过这个小项目利用树莓派来熟悉Python编程,而且通过实际操作可以掌握一些具体的细节与技巧,这里我将整个 ...

最新文章

  1. OpenCV3.3中决策树(Decision Tree)接口简介及使用
  2. Java业务代表模式
  3. DataTable分页控件设计(适用于Gridview和Repeater)
  4. 推荐MIT的电路与电子学
  5. 2、Java Swing JFrame和JPanel:窗口容器和面板容器
  6. 如何获取filecoin_Filecoin如何获取更大的出块机会?
  7. javafx显示image_如何摆脱JavaFX中的重点突出显示
  8. 电子数字计算机和电子模拟计算机区别,电子数字计算机和电子模拟计算机的区别在哪里?...
  9. ofo的智能锁初代方案:声波频率识别开锁
  10. RHY融获基金数字资产投资,海外扩建加速
  11. oracle如何在月份前面加0,时间怎么把月份数字前面添加0
  12. VUE项目中CSS设置动态宽度的方法
  13. python和按键精灵自动化测试_自动化测试程序和按键精灵
  14. 在职研究生读计算机专业,读计算机专业在职研究生让我择业自如高升有望
  15. win10 + cmd常见命令的使用
  16. JN516x串口测试
  17. 基于Python Scrapy爬虫改进KNN算法的网站分类系统
  18. 谨慎使用rm -rf
  19. 动态gmm模型学习笔记3-动态面板回归的GMM方法
  20. “骑驴找马”很心虚?四大困惑一起解决!

热门文章

  1. [80一代]关于垮掉的一代
  2. 易都市三维城市地图网址
  3. VMware磁盘扩容
  4. 使用while循环,求1+11+111+1111+11111+111111
  5. Pytorch 构建简单Neural Networks
  6. linux安装深度播放器,Ubuntu下安装深度音乐播放器Dmusic
  7. HNU工训中心: 三人表决器及八人抢答器实验报告
  8. 直接在Unity中创建模型(三)——ProBuilder组件简介——ShapeTool
  9. Linux内核设计与实现——第4章:进程调度
  10. C/C++里面使用loadimage导入图片和使用miSendString播放音乐函数运行不显示图片不播放音乐的解决问题