vs2017+opencv4.0+python+车牌图像处理与定位(分享我的学习记录)

vs2017+opencv4.0+python+车牌图像处理与定位

学习方法参考:https://gitchat.csdn.net/activity/59fe7550d343ff71a3c8620f?utm_source=so
https://blog.csdn.net/weixin_41695564/article/details/79712393
import cv2
rawImage = cv2.imread(“图片地址”)//读取图片
参考:https://blog.csdn.net/zhang_cherry/article/details/88951259

1)高斯模糊:去除部分的干扰,将图片平滑化,让识别更加准确。

PS:所谓"模糊",可以理解成每一个像素都取周边像素的平均值。

image = cv2.GaussianBlur(rawImage,(3,3),0)
2)灰度化:将彩色图像转化成为灰度图像。

image = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
3)Sobel算子:图像边缘检测

Sobel_x = cv2.Sobel(image, cv2.CV_16S, 1, 0)

absX = cv2.convertScaleAbs(Sobel_x)

image = absX

参考:https://blog.csdn.net/YanMY2012/article/details/8110316

4)二值化:将图像上的像素点的灰度值设置为0或255,也就是呈现的只有黑白两种颜色(函数的作用是将一幅灰度图二值化)

ret, image = cv2.threshold(image, 0, 255, cv2.THRESH_OTSU)

参考:https://blog.csdn.net/kwame211/article/details/86307946

5)闭操作:可以将目标区域连成一个整体,便于后续轮廓的提取

kernelX = cv2.getStructuringElement(cv2.MORPH_RECT, (17, 5))

PS:开运算(Opening Operation),其实就是先腐蚀后膨胀的过程;先膨胀后腐蚀的过程称为闭运算。

image = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernelX)

参考:https://blog.csdn.net/poem_qianmo/article/details/24599073

6)膨胀腐蚀:通过膨胀连接相近的图像区域,通过腐蚀去除孤立细小的色块

kernelX = cv2.getStructuringElement(cv2.MORPH_RECT, (20, 1))

kernelY = cv2.getStructuringElement(cv2.MORPH_RECT, (1, 19))

image = cv2.dilate(image, kernelX)

image = cv2.erode(image, kernelX)

image = cv2.erode(image, kernelY)

image = cv2.dilate(image, kernelY)

参考:https://blog.csdn.net/poem_qianmo/article/details/23710721

7)中值滤波:去除图像或者其他信号中的噪声

image = cv2.medianBlur(image, 15)

8)查找轮廓

tmp, contours, w1 = cv2.findContours(image, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

PS:但是该函数返回的三个参数具体表示的是什么呢?

网上是旧的代码版本,有三个返回值,新的j有两个。

旧:image,contours ,hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

PS:删除第一个返回值image即可!!!!!

参考:https://blog.csdn.net/songjinxaing/article/details/79842474
https://blog.csdn.net/jjddss/article/details/73527990

for item in contours:
rect = cv2.boundingRect(item)
x = rect[0]
y = rect[1]
weight = rect[2】
height = rect[3]
if weight > (height * 2):

chepai = rawImage[y:y + height, x:x + weight]

cv2.imshow(‘chepai’+str(x), chepai)

  1. 绘制轮廓

image = cv2.drawContours(rawImage, contours, -1, (0, 255, 255), 3)

cv2.imshow(‘image’, image)

cv2.waitKey(0)

cv2.destroyAllWindows()
参考:https://blog.csdn.net/wsp_1138886114/article/details/82945328

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值