如何从车道检测项目入门OpenCV?

摘要:从车道检测项目入门open cv 前提声明:非常感谢b站up主 嘉然今天吃带变,感谢其视频的帮助。同时希望各位大佬积积极提出宝贵的意见。😊😊😊(
从车道检测项目入门open cv 前提声明:非常感谢b站up主 嘉然今天吃带变,感谢其视频的帮助。同时希望各位大佬积积极提出宝贵的意见。😊😊😊(❁´◡`❁)(●'◡'●)╰(°▽°)╯ github地址:https://github.com/zhongzhengli13/openCV_Lane_Detection 视频地址:从车道检测项目入门open cv 基础知识 cv2.imread & cv2.imshow & cv2.imwrite import cv2 as cv img = cv.imread("img.png", cv.IMREAD_GRAYSCALE) #将图片转为灰度图 但是当前会存在一些问题,图片会闪一下,看不清楚,所以我们可以加上阻塞 cv2.waitKey()函数 #完整版 import cv2 as cv img = cv.imread("img.png", cv.IMREAD_GRAYSCALE) print(type(img)) print(img.shape) cv.imshow('image', img) k = cv.waitKey(0) # 阻塞 #k相当于检测你的输入的ascii值 print(k) # while True: # if cv.waitKey(0) == ord('q'): # cv.destroyAllWindows() # else: # img = cv.imread("img.png", cv.IMREAD_GRAYSCALE) cv.imwrite("img_gray.png", img)#生成img图片,保存到当前目录中~ 效果展示 原始图像: 灰度图: Canny边缘检测 通过求取图像上每一个像素点周边图像像素变化的梯度,来确定这个点是否是边缘。 梯度的方向一般总是与边界垂直,梯度的方向被归为四类:垂直、水平和两个对角线(即,0度、45度、90度和135度四个方向)。 我们现在的想法是设置一个阈值,当梯度大于阈值时,我们可以认为该点是边缘。但是随之而来的是,图片会产生一些毛边或者光线,角度等问题,导致可能会误判。 为了解决这个问题,我们采用双阈值的方法,一个上阈值,一个下阈值。 我们认为高于上阈值的点为强边缘,在上阈值和下阈值之间的我们认为是弱边缘。 我们认为只有弱边缘与强边缘相连的话,才是边缘。B不认为是边缘,可能是噪声;C与A强边缘相连,我们认为C是边缘。 import cv2 img = cv2.imread("img.png", cv2.IMREAD_GRAYSCALE) edge_img = cv2.Canny(img, 190, 350) # 下边缘和上边缘的阈值设定 #需要自行更改 cv2.imshow("edge", edge_img) cv2.waitKey(0) 当上边缘和下边缘都升高时,边缘显示会越来越少。 ROI mask 简单来讲就是类似于抠图,就是剔除无关信息的边缘。 roi : region of interest 感兴趣的区域 ​ 数组切片 ​ 布尔运算(与运算) cv2.fillPoly 是 OpenCV 中的一个函数,用于在图像中填充多边形区域。它常用于绘制、遮罩或标记图像中的特定区域。通过指定多边形的顶点,cv2.fillPoly 可以将这些区域填充为指定的颜色。 cv2.bitwise_and 是 OpenCV 中的一个函数,用于对两个图像或数组进行按位与(bitwise AND)操作。按位与操作是逐像素进行的,只有当两个图像的对应像素都为非零值时,结果图像的该像素才为非零值。 图像遮罩: 使用掩码提取图像的特定区域。例如,将一个形状(如矩形、圆形或多边形)作为掩码,只保留掩码内的图像内容。 图像合成: 将两个图像的特定部分组合在一起。 图像处理: 在图像处理中,按位与操作常用于对图像进行区域选择或区域遮挡。 图像以矩阵np.array形式存储在内存中 ​ np.zeros_like : np.zeros_like 是 NumPy 库中的一个函数,用于创建一个与给定数组形状和数据类型相同的数组,但所有元素都初始化为零。
阅读全文