使用python里的OpenCV包做简单的车道线检测

参考教程:

【从车道线检测项目入门OpenCV】 https://www.bilibili.com/video/BV1qk4y1r7jw/?p=3\&share_source=copy_web\&vd_source=9332b8fc5ea8d349a54c3989f6189fd3
注意:首先应该安装OpenCV包。

openCV用法

读取图片

PYTHON 复制代码
# 读取成灰度
img = cv2.imread('img.jpg', cv2.IMREAD_GRAYSCALE)

# 显示图片
cv2.imshow('img_gray', img)

# 阻塞,参数设置为0,返回值是等待键盘
cv2.waitKey(0)

# 保存文件,需要指定文件后缀名
cv2.imwrite('img_gray.bmp', img)

canny边缘检测

canny计算四个方向的梯度(每个方向加上反方向就是八个方向),经过运算得到一个梯度值,设置了上下阈值,

PYTHON 复制代码
    edges = cv2.Canny(img, minThreshold, maxThreshold)

感兴趣区域选取

python 复制代码
# 创建一个与给定数组形状和类型相同的新数组,所有元素都初始化为 0
mask = np.zeros_like(edge_img)
# 用于在图像上填充一个或多个多边形
mask = cv2.fillPoly(mask,
                    np.array([[[0, 368], [300, 210], [340, 210], [640, 368]]]),
                    color=255)
# 对两个数组或图像进行按位与操作
masked_edge_img = cv2.bitwise_and(edge_img, mask)

霍夫变换

在一定误差范围交于某一个点即可

python 复制代码
    # 获取所有线段
    lines = cv2.HoughLinesP(edge_img, 1, np.pi / 180, 15, minLineLength=40,
                            maxLineGap=20)

参数说明:

  • image:边缘检测后的二值图像,通常是使用 Canny 边缘检测或其他方法得到的。 rho:从中心到直线的距离的精度,以像素为单位。
  • theta:角度的精度,以弧度为单位。 threshold:阈值,即一个直线的候选必须有的最小票数(即通过变换得到的交点数)。
  • minLineLength:检测到的线段的最小长度,小于这个长度的线段会被忽略。
  • maxLineGap:同一直线上的两点之间允许的最大间隙,即如果两个线段之间的间隙小于或等于这个值,它们会被认为是同一条直线。
  • lineType:线条的类型(默认是 cv2.CV_8UC1),即线条的类型,可以是 cv2.CV_8UC1 或cv2.CV_32SC1。

返回值:

lines:一个数组,其中每个元素是一个 (x1, y1, x2, y2) 的元组,表示检测到的线段的两个端点。

相关推荐
小oo呆7 小时前
【学习心得】Python多线程
python
happylifetree11 小时前
Python70:核心语法-函数进阶-案例2
python
irislinAmelia11 小时前
缺陷检测AI关键点在哪
人工智能·嵌入式硬件·1024程序员节
Ai-_Man11 小时前
Meta Muse还是不可以导出左侧所有对话,只能点进去单条内容导出,方法不对吗?
开发语言·人工智能·ai·小程序·c#·1024程序员节
安托智造11 小时前
MBD:从二维图纸到三维模型的制造革命(下)
大数据·人工智能·制造·mbd
火山引擎开发者社区11 小时前
VeOps 深度调查:让 AI 排障从“能用”走向“可靠”
人工智能
梓豪csd11 小时前
消息订阅中心:谁该收到哪条通知
java·开发语言·人工智能·低代码·自动化·1024程序员节
王中阳Go11 小时前
两个入口答案不一致先别调模型:6 行入口口径对账表(附脚本)
人工智能·后端·python·大语言模型·1024程序员节
BK贝壳11 小时前
bool-hybrid-array 落盘我只认 .bha:用 Create_BHA / Ask_BHA 做布尔数组序列化
数据结构·python·numpy·1024程序员节
武天旭11 小时前
AI安全--AI大模型的隐私保护与法律法规
人工智能·安全