700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > python+opencv图像处理之边缘检测车道线识别

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

时间:2019-07-12 17:44:42

相关推荐

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

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

1.自行安装python和opencv

2.导入我们要使用的相关库

import cv2from matplotlib import pyplot as pltimport 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-/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函数采用的第一个参数是将对其执行操作的图像。第二参数是低阈值,第三参数是高阈值。逐像素扫描图像以进行边缘检测。一旦存在低于下阈值的值,则检测到边缘的第一侧。当找到一个比较高阈值高的值时,确定另一侧并创建边缘。因此,为每个图像和每个问题确定阈值参数值,为了更好地观察高斯模糊效果,让我们做同样的动作而又不模糊这次。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。