当前位置:   article > 正文

基于opencv的车牌识别详细过程_opencv车牌图像二值化程序

opencv车牌图像二值化程序

 

 

 

 

  1. # 导入所需模块 pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
  2. import cv2
  3. from matplotlib import pyplot as plt
  4. import os
  5. import numpy as np
  6. # plt显示彩色图片
  7. def plt_show0(img):
  8. # cv2与plt的图像通道不同:cv2为[b,g,r];plt为[r, g, b]
  9. b, g, r = cv2.split(img)
  10. img = cv2.merge([r, g, b])
  11. plt.imshow(img)
  12. plt.show()
  13. # plt显示灰度图片
  14. def plt_show(img):
  15. plt.imshow(img, cmap='gray')
  16. plt.show()
  17. # 图像去噪灰度处理
  18. def gray_guss(image):
  19. image = cv2.GaussianBlur(image, (3, 3), 0)
  20. gray_image = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
  21. return gray_image
  22. # 读取待检测图片
  23. origin_image = cv2.imread('车牌.jpg')
  24. # 复制一张图片,在复制图上进行图像操作,保留原图
  25. image = origin_image#.copy()
  26. # 图像去噪灰度处理
  27. gray_image = gray_guss(image)
  28. # x方向上的边缘检测(增强边缘信息)
  29. Sobel_x = cv2.Sobel(gray_image, cv2.CV_16S, 1, 0)
  30. absX = cv2.convertScaleAbs(Sobel_x)
  31. image = absX
  32. # 图像阈值化操作——获得二值化图
  33. ret, image = cv2.threshold(image, 0, 255, cv2.THRESH_OTSU)
  34. # 显示灰度图像
  35. #plt_show(image)
  36. # 形态学(从图像中提取对表达和描绘区域形状有意义的图像分量)——闭操作
  37. kernelX = cv2.getStructuringElement(cv2.MORPH_RECT, (30, 10))
  38. image = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernelX, iterations=1)
  39. # 显示灰度图像
  40. #plt_show(image)
  41. # 腐蚀(erode)和膨胀(dilate)
  42. kernelX = cv2.getStructuringElement(cv2.MORPH_RECT, (50, 1))
  43. kernelY = cv2.getStructuringElement(cv2.MORPH_RECT, (1, 20))
  44. # x方向进行闭操作(抑制暗细节)
  45. image = cv2.dilate(image, kernelX)
  46. image = cv2.erode(image, kernelX)
  47. # y方向的开操作
  48. image = cv2.erode(image, kernelY)
  49. image = cv2.dilate(image, kernelY)
  50. # 中值滤波(去噪)
  51. image = cv2.medianBlur(image, 21)
  52. # 显示灰度图像
  53. #plt_show(image)
  54. # 获得轮廓
  55. contours, hierarchy = cv2.findContours(image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
  56. for item in contours:
  57. rect = cv2.boundingRect(item)
  58. x = rect[0]
  59. y = rect[1]
  60. weight = rect[2]
  61. height = rect[3]
  62. # 根据轮廓的形状特点,确定车牌的轮廓位置并截取图像
  63. if (weight > (height * 3.5)) and (weight < (height * 4)):
  64. image = origin_image[y:y + height, x:x + weight]
  65. plt_show0(image)
  66. # 图像去噪灰度处理
  67. gray_image = gray_guss(image)
  68. # 图像阈值化操作——获得二值化图
  69. ret, image = cv2.threshold(gray_image, 0, 255, cv2.THRESH_OTSU)
  70. plt_show(image)
  71. # 膨胀操作,使“苏”字膨胀为一个近似的整体,为分割做准备
  72. kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (2, 2))
  73. image = cv2.dilate(image, kernel)
  74. plt_show(image)

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/794423
推荐阅读
相关标签
  

闽ICP备14008679号