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函数采用的第一个参数是将对其执行操作的图像。第二参数是低阈值,第三参数是高阈值。逐像素扫描图像以进行边缘检测。一旦存在低于下阈值的值,则检测到边缘的第一侧。当找到一个比较高阈值高的值时,确定另一侧并创建边缘。因此,为每个图像和每个问题确定阈值参数值,为了更好地观察高斯模糊效果,让我们做同样的动作而又不模糊这次。
python+opencv图像处理之边缘检测车道线识别相关推荐
- python视觉识别线条_简单车道线识别
本文将介绍如何利用Opencv,对简单场景下的车道线进行离线识别.梳理整个识别过程的逻辑,并对过程中使用的相关知识点进行介绍.正文中使用C++实现,在文末也会附上利用python实现的代码,读者完全可 ...
- 自动驾驶入门(十二):基于Opencv的车道线识别
车道线识别有两种方法: 基于Opencv的传统视觉车道线识别方案 基于深度学习的车道线识别方案 本文将介绍基于Opencv的传统视觉车道线识别方案. 传统的车道线识别解决方案流程图如下: 代码实现如下 ...
- Python OpenCV车道线识别侦测
Python OpenCV车道线识别侦测 如需安装运行环境或远程调试,可加QQ905733049, 或QQ2945218359由专业技术人员远程协助! 运行结果如下: 代码如下: import cv2 ...
- 基于opencv的车道线识别(python)(极易实现)
简易车道线识别方法 文章目录 简易车道线识别方法 1.先上效果图 1.1原图: 1.2结果图 2.源代码 3.阈值脚本 4.谈谈优缺点 优点: 缺点: 1.先上效果图 1.1原图: 1.2结果图 2. ...
- 无人驾驶虚拟仿真(八)--图像处理之车道线识别3
简介:在上一节中,我们完成了单张图片车道线的检测,在最终的结果中,可以比较明确的观察出车辆相对车道线的位置,接下来,我们要把这一功能移植到ROS系统中,将小车抓取到的图像都处理成车道线数据,并发布到下 ...
- 数字图像处理二维码识别 python+opencv实现二维码实时识别
数字图像处理二维码识别 python+opencv实现二维码实时识别 特点: (1)可以实现普通二维码,条形码: (2)解决了opencv输出中文乱码的问题 (3)增加网页自动跳转功能 (4)实现二维 ...
- Python车道线识别
最近找了一款车道线识别的代码,可以准确识别出车道线,里面的视频路径可以切换为自己的视频,现在我以自带的视频数据展示效果 图片中可以准确识别车的车道线: 下面给出一部分源代码: import cv2 i ...
- 基于视觉的车道线识别技术在智能车导航中的应用研究
密级:公开 摘 要 摘 要 室外移动机器人的研究是机器人研究领域的重要分支,同时也是备受关注的热点领域.面向高速公路等结构化道路的室外移动机器人研究已成为现阶段民用交通运输领域移动机器人研究的主流 ...
- Python+OpenCV图像处理(一篇全)
参考:1.网易云课堂 Python+OpenCV图像处理 - 网易云课堂 2.[在水一方xym的博客]业精于勤荒于嬉,行成于思毁于随 - CSDN博客 https://blog.csdn.net/za ...
最新文章
- 圆形百分比_还有半圆形的饼图!怎么做出来的?
- 探索MySQL高可用架构之MHA(6)
- java不同项目加token访问_实战:你用SpringBoot集成JWT来实现一下token验证,可否?...
- oracle11gR2静默安装
- Jscript中window.setInterval和window.setTimeout的区别
- python调用robotframework_robotframework+python接口自动化的点滴记录(2)
- svg载入html,SVG系列教程:SVG简介与嵌入HTML页面的方式
- [转载] 《python程序设计应用教程》第一章 python语言概述
- uniapp实现app长截图
- 全球云服务商排名情况及国内云主机市场占有率份额排名对比
- 重温51汇编指令(附实验)
- 作为应届生到底是去大的IT公司好,还是去小的IT公司好?
- 随身WiFi刷debian固件
- VBScript UBound 函数
- HTML将某几个文字添加下划线 并标红
- crontab -r删除后恢复
- DJ3-5 死锁概述
- 深度学习基本模型浅析
- 【功能安全】【ISO26262】支持过程
- 聚合函数与F/Q表达式