python+opencv图像处理之边缘检测车道线识别

python+opencv图像处理之边缘检测车道线识别

1.自行安装python和opencv
2.导入我们要使用的相关库

import cv2
from matplotlib import pyplot as plt
import numpy as np

3.我们使用以下图片做本次项目原图在这里插入图片描述

img = cv2.imread("lu.png")  # 读入图片
print(img.shape)  # 查看属性
#plt.imshow(gray_image)  # matplotlib中show函数
#plt.show()#显示
#print(gray_image.shape)#属性

图像的尺寸(825, 1099)。当我们在读取中要打印图像的尺寸时,我们得到的结果shi(825, 1099, 3)。在读取过程中计算机把图像按照矩阵进行像素的分配,因为图像是彩色的,所以RGB有3个维度,
如果我们想将彩色图像转为黑白图像,测使用cvtColor函数

gray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 转黑白图像

在这里插入图片描述

4.阈值处理
当我们把图像转为黑白图像,我们图像的尺寸,不再是RGB3个维度,看过图像矩阵的都知道矩阵是有0-255组成,我们可能希望此矩阵仅由0-255的值组成,这种情况我们就要使用到阈值功能。

# (thresh, blackAndwhiteImage) = cv2.threshold(gray_image, 20, 255, cv2.THRESH_BINARY)
# (thresh,blackAndwhiteImage) = cv2.threshold(gray_image,80,255,cv2.THRESH_BINARY)
# (thresh,blackAndwhiteImage) = cv2.threshold(gray_image,160,255,cv2.THRESH_BINARY)
(thresh, blackAndwhiteImage) = cv2.threshold(gray_image, 200, 255, cv2.THRESH_BINARY)  # 阈值处理
# plt.show(blackAndwhiteImage)
# plt.show()
cv2.imshow("Image-New", blackAndwhiteImage)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述
OpenCV中阀值功能所需的第一个参数是要处理的图像。以下参数是阈值。第三个参数是我们要分配超出阈值的矩阵元素的值,可以在图3中看到四个不同阈值的影响,在第一张图像(图像1)中,该阈值确定为20.将20之上的所有值分配给255.其余值为设置为0。这仅允许黑色或非常深的颜色为黑色,而所有其他阴影直接为白色。图像2和图像3的阈值分别为80和160.最后,在图像4中将阈值确定为200.与图像1不同,白色和非常浅的颜色被指定为255,而所有在图4中将剩余值设置为0。

5.模糊处理

output2 = cv2.blur(gray_image, (10, 10))  # 图像模糊
output3 = cv2.GaussianBlur(gray_image, (9, 9), 5)#模糊函数,消除噪声
# # plt.show(output2)
# # plt.show()
cv2.imshow("Image-New", output3)
cv2.waitKey()
cv2.destroyAllWindows()
![在这里插入图片描述](https://img-blog.csdnimg.cn/90ff84f6781248d69daf61a158f56212.jpg?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5Lq655Sf5L2T6aqM5a6Y,size_14,color_FFFFFF,t_70,g_se,x_16)
黑白图像使用指定的模糊滤镜和模糊度模糊。此过程通常用于消除图像中的噪点。此外,在某些情况下,由于图像中的线条清晰,训练也会受到严重影响。出于此原因使用它的情况下可用。

6.图像旋转

```python
(h, w) = img.shape[:2]
center = (w / 2, h / 2)
M = cv2.getRotationMatrix2D(center, 13, scale=1.1)
rotated = cv2.warpAffine(gray_image, M, (w, h))  # 图像旋转
cv2.imshow("Image-New", rottated)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述
首先,确定图像的中心,并以此中心进行旋转,getRotationMatrix2D函数的第一个参数是计算出的中心值,第二个参数是角度值,最后,第三个参数是旋转后要应用的缩放比例值。如果将此值设置为1,它将仅根据给定的角度旋转同一图像,而不会进行任何缩放。
7.边缘检测
假设我们要训练车辆的自动驾驶飞行员。当检查图中的图像以解决此问题时,我们的自动驾驶仪应该能够理解路径和车道,我们可以使用OpenCV解决此问题,由于颜色在此问题中无关紧要,因此图像将转换为黑白,矩阵元素通过确定的阈值设置值0和255。如上面在阈值功能的解释中提到的,阈值的选择对于该功能至关重要。该问题的阈值设置为200。我们可以清除其他详细信息,因为这足以专注于路边和车道。为了消除噪声,使用高斯模糊函数执行模糊处理,可以从图中到s详细检查到此为止的部分。

这些过程之后,将应用Canny边缘检测。

(thresh, output2) = cv2.threshold(gray_image, 200, 255, cv2.THRESH_BINARY)
output2 = cv2.GaussianBlur(output2, (5, 5), 3)  # 模糊图像
output2 = cv2.Canny(output2, 180, 255)  # 模糊图像边缘检测
cv2.imshow("Image-New", output2)
cv2.waitKey()
cv2.destroyAllWindows()

结果显示
在这里插入图片描述Canny函数采用的第一个参数是将对其执行操作的图像。第二参数是低阈值,第三参数是高阈值。逐像素扫描图像以进行边缘检测。一旦存在低于下阈值的值,则检测到边缘的第一侧。当找到一个比较高阈值高的值时,确定另一侧并创建边缘。因此,为每个图像和每个问题确定阈值参数值,为了更好地观察高斯模糊效果,让我们做同样的动作而又不模糊这次。

  • 4
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

车载testing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值