【图像处理】Python+OpenCV实现车牌区域识别及Sobel算子

 2024-02-25 00:02:59  阅读 0

[图像处理] + 实现车牌区域识别和Sobel算子

由于最近太忙,本文仅给出相关代码,供大家学习。 随着时间的推移,我会详细写一系列图像处理文章,包括各种算法原理、图像识别、图像增强、图像分类、深度学习等。本文主要调用库(cv2)进行车牌区域识别。 具体步骤包括:

1、灰度转换:将彩色图片转换为灰度图像,常见的R=G=B=像素平均值。

2.高斯平滑和中值滤波:去除噪声。

3.Sobel算子:提取图像边缘轮廓,X方向和Y方向的平方和。

4.二值化处理:将图像转换为黑白。 通常,大于127的像素设置为255,小于127的像素设置为0。

5. 扩展和细化:放大图像轮廓并将其转换为包含车牌的区域。

6. 通过算法选择合适的车牌位置,通常会过滤掉较小的区域或寻找蓝色背景的区域。

7. 标记车牌位置。 如果是花、人脸、角,可能需要进行特征提取和训练。

本文是一篇基础文章。 希望对您有所帮助。 主要提供一些思路,也是我自己教学的内容。 文章如有错误或不足之处,敬请谅解。 同时推荐大家阅读我之前的文章,学习其他知识。

推荐我C++图像基础知识系列:

PSS:2019年1月至2月,作者参加年度博客评选。 希望您能投出宝贵的一票。 我是59号,杨秀章。 投票地址:

过去五年我写了 314 个博客和 12 个专栏。 我真的很喜欢分享,我喜欢CSDN平台,我想帮助更多的人。 栏目有数据挖掘、网络爬虫、图像处理、C#等。现在当老师两年了,我觉得自己有义务教好每一个学生,让贵州的学生能写点代码学学一些技巧。 “老师是来教学、解疑的。” 提前祝大家新年快乐。 2019年,我们一起努力,为爱而活。

1. 读取图像并进行灰度转换

代码如下所示:

#:utf-8 cv2 numpy 作为 np 。 作为PLT

#读取图像 = '10.jpg' img = cv2.()

#默认以BGR格式存储 #且默认以RGB格式显示

#所以这里要转换图像的通道 = cv2.(img,cv2.) #灰度图像处理

= cv2.(img,cv2.) print(u"读入的lenna图的形状是",

.shape) #显示图形 = ['图像', '灰度图像'] =

[, ] 对于 (2) 中的 i:

plt.(1,2,i+1),plt.([i],'灰色') plt.title([i])

plt.([]),plt.([]) plt.show() cv2.('Gray.bmp', )

opencv图像二值化处理_opencv图像处理编程实例_opencv图像细化

简历2.(0)

输出如下图所示:

2.高斯平滑和中值滤波去噪

这里的原理推荐我之前的C++图像处理文章,如下:

完整代码如下:

#:utf-8 cv2 numpy 作为 np 。 作为PLT

#读取图像 = '10.jpg' img = cv2.()

#默认以BGR格式存储 #且默认以RGB格式显示

#所以这里要转换图像的通道 = cv2.(img,cv2.) #灰度图像处理

= cv2.(img,cv2.) print(u"读入的lenna图的形状是",

.shape) #直方图均衡 #equ = cv2.(gray) #高斯平滑=

cv2.(, (3, 3), 0, 0, cv2.) # =

cv2.(, (9, 9),0) #中值滤波器 = cv2.(,

5) #显示图形 = ['图像', '灰度图像', '图像', '

Image'] = [, , , ] 对于 (4) 中的 i:

plt.(2,2,i+1),plt.([i],'灰色') plt.title([i])

plt.([]),plt.([]) plt.show()

输出结果如下图所示,分别是原始图像、灰度图像、高斯处理和中值滤波处理。

3.Sobel算子轮廓提取及二值化处理

有时需要增强图像中场景的边缘和轮廓。 边缘和轮廓通常位于图像中灰度突出的地方。 因此,很直观地想到利用灰度的差异来提取边缘和轮廓,通常可以通过梯度算子来提取。 。 图像锐化的目的是通过增加邻域像素的灰度差来提高图像的对比度,从而使图像更加清晰。 本文采用Sobel算子提取边缘轮廓。

阈值也称为临界值。 其目的是确定一个范围,然后对这个范围内的部分采用相同的方法进行处理,而在阈值之外的部分采用另一种方法进行处理或保持不变。 常用的包括生成二进制图:当 x=T(其中 T 是阈值)时,y=255。 阈值变换广泛应用于生物学中,例如细胞图像分割。 本文采用二值处理的方式,将大于等于170的像素转换为255,以下的转换为0,使图像更加清晰。

完整代码如下:

#:utf-8 cv2 numpy 作为 np 。 作为PLT

#读取图像 = '10.jpg' img = cv2.()

#默认存储在BGR = cv2.(img,cv2.)

#灰度图像处理 = cv2.(img,cv2.)

print(u"将 lenna 图的形状读取为", .shape) #直方图均衡#equ =

cv2.(gray) # 高斯平滑 = cv2.(, (3, 3), 0,

0, cv2.) # 中值滤波器 = cv2.(, 5) # 索贝尔算子

求XY方向的梯度 x = cv2.Sobel(, cv2.CV_8U, 1, 0, ksize = 3) #X方向 y =

cv2.Sobel(, cv2.CV_8U, 0, 1, ksize = 3) #Y方向absX =

cv2.(x) # 转换回 uint8 absY = cv2.(y) Sobel =

cv2.(absX,0.5,absY,0.5,0)cv2.('',索贝尔)

cv2.(0) # 二值化处理影响周围像素 ret, = cv2.(Sobel, 170, 255,

cv2.) cv2.('',) cv2.(0) #显示图形=

['图像','灰度图像','图像','图像','索贝尔图像',

'图像'] = [,,,,,索贝尔,

] for i in (6): plt.(2,3,i+1),plt.([i],'gray')

plt.title([i]) plt.([]),plt.([]) plt.show()

输出如下:

4、膨胀、腐蚀处理

接下来是膨胀和蚀刻过程,其中膨胀使轮廓突出,蚀刻去除细节。

#:utf-8 cv2 numpy 作为 np 。 作为PLT

#读取图像 = '10.jpg' img = cv2.()

#默认存储在BGR = cv2.(img,cv2.)

#灰度图像处理 = cv2.(img,cv2.)

print(u"将 lenna 图的形状读取为", .shape) #直方图均衡#equ =

cv2.(gray) #高斯平滑去噪 = cv2.(, (3, 3),

opencv图像处理编程实例_opencv图像二值化处理_opencv图像细化

0, 0, cv2.) # = cv2.(, (9, 9),0)

#中值滤波器 = cv2.(, 5) #Sobel算子求XY方向的梯度 cv2.CV_8U x =

cv2.Sobel(, cv2., 1, 0, ksize = 3) #X 方向 y = cv2.Sobel(,

cv2., 0, 1, ksize = 3) #Y方向 #absX = cv2.(x) # 转回uint8

#absY = cv2.(y) #Sobel = cv2.(absX, 0.5, absY, 0.5,

0) = cv2.(x, y) 索贝尔 = cv2.()

cv2.('', Sobel) cv2.(0) #二值化处理周围像素=

cv2.(Sobel, (9, 9),0) # 然后进行高斯去噪 # 注意170可以换成ret, =

cv2.( , 90, 255, cv2.) cv2.('',

) cv2.(0) #膨胀和腐蚀操作的核函数=

cv2.t(cv2., (9, 1)) =

cv2.t(cv2., (9, 7)) # 扩展使轮廓突出=

cv2.(, , = 1) # 腐蚀去除细节=

cv2.erode(, , = 1) #再次膨胀=

cv2.(, , = 3) cv2.(' ',

) cv2.(0) #显示图形 = ['图像','灰度图像',

'图像', '图像', '索贝尔图像', '图像', '

图像', '图像', '图像'] = [, ,

, , 索贝尔, , , , ] 为我在

(9): plt.(3,3,i+1),plt.([i],'灰色')

plt.title([i]) plt.([]),plt.([]) plt.show()

输出结果如下图所示。 可以看到轮廓区域已经被提取出来,然后开始选择性采集。

5.指定选择车牌区域的算法

这部分代码与膨胀和腐蚀略有不同,是使用变量来实现的。 同时得到最理想的面积。 完整代码如下:

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码