前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >解决OpenCV滑动条变换轨迹而图像变化后不能归位的问题

解决OpenCV滑动条变换轨迹而图像变化后不能归位的问题

作者头像
荣仔_最靓的仔
发布于 2021-09-07 09:13:51
发布于 2021-09-07 09:13:51
75700
代码可运行
举报
运行总次数:0
代码可运行

今天使用 OpenCV 进行车道线检测时,为了快速找到合适的 Canny 算子高、低阈值以及 Sobel 算子 threshold 阈值,决定采用 OpenCV 中的 createTrackbar 和 getTrackbarPos 方法。结果一个问题的出现使我措手不及:调整阈值画车道线只能在前一时刻图像基础上变化,也就是只能使得识别出的车道线变多,不能变少,更不能恢复到没有识别出车道线的那张图像。 就像这样,变多的时候好好的,回不去了!!?

下面说一下解决办法:

这是最开始写的关键代码 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
imgpath = "图片路径"
img = cv.imread(imgpath)
img_crop = img[500:, :]

img_blur = cv.GaussianBlur(img_crop, (11, 11), 0)
img_sobel = my_sobel(img_blur)

def my_hough():
    min = cv.getTrackbarPos('min', 'hough image')
    max = cv.getTrackbarPos('max', 'hough image')
    threshold = cv.getTrackbarPos('hough', 'hough image')
    img_canny = cv.Canny(img_sobel, min, max)
    lines = cv.HoughLines(img_canny, 1, np.pi / 180, threshold)

    for line in lines:
        rho, theta = line[0]

        a = np.cos(theta)
        b = np.sin(theta)
        x0 = a * rho
        y0 = b * rho

        x1 = int(x0 + 1000 * (-b))
        y1 = int(y0 + 1000 * (a))
        x2 = int(x0 - 1000 * (-b))
        y2 = int(y0 - 1000 * (a))
        cv.line(img_crop, (x1, y1), (x2, y2), (0, 0, 255), 2)

    cv.imshow('hough image', img_crop)

这是因为滑动条滑动导致阈值变换,处理的图片一直都是在上一时刻停留那个位置的阈值处理出的图片基础上运行的,简单来讲,就是一种叠加作用,然后当变换阈值使得识别出车道线变少,也就看不出来了。

解决办法是创建一个新图像,这个图像用于获得处理前的图像,相当于是复制处理前的那个图像,用的是关于图像复制的 .copy() 方法。

按照此思路变换后的关键代码是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
imgpath = "图片路径"
img = cv.imread(imgpath)
img_crop = img[500:, :]

img_blur = cv.GaussianBlur(img_crop, (11, 11), 0)
img_sobel = my_sobel(img_blur)

def my_hough():
    min = cv.getTrackbarPos('min', 'hough image')
    max = cv.getTrackbarPos('max', 'hough image')
    threshold = cv.getTrackbarPos('hough', 'hough image')
    dst = img_crop.copy()                 # 加这一句
    img_canny = cv.Canny(img_sobel, min, max)
    lines = cv.HoughLines(img_canny, 1, np.pi / 180, threshold)

    for line in lines:
        rho, theta = line[0]

        a = np.cos(theta)
        b = np.sin(theta)
        x0 = a * rho
        y0 = b * rho

        x1 = int(x0 + 1000 * (-b))
        y1 = int(y0 + 1000 * (a))
        x2 = int(x0 - 1000 * (-b))
        y2 = int(y0 - 1000 * (a))
        dst = cv.line(dst, (x1, y1), (x2, y2), (0, 0, 255), 2)

    cv.imshow('hough image', dst)

这就达到了想要的结果(可复原):

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/07/23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python opencv图像处理基础总结(六) 直线检测 圆检测 轮廓发现
我还有改变的可能性 一想起这一点 我就心潮澎湃 文章目录 一、直线检测 使用霍夫直线变换做直线检测,前提条件:边缘检测已经完成 # 标准霍夫线变换 cv2.HoughLines(image, rho, theta, threshold, lines=None, srn=None, stn=None, min_theta=None, max_theta=None) image:经过边缘检测的输出图像,8位,单通道二进制源图像 rho:距离步长 theta:角度步长 threshold:阈值,只有
叶庭云
2020/09/17
8.7K0
Python opencv图像处理基础总结(六) 直线检测 圆检测 轮廓发现
Python OpenCV 霍夫(Hough Transform)直线变换检测应用
在 OpenCV 中提供了两个霍夫直线检测的函数,一个是标准霍夫变换,另一个是概率霍夫变换。
玖柒的小窝
2021/09/20
2K0
Python OpenCV 霍夫(Hough Transform)直线变换检测应用
OpenCV从零基础---检测及分割图像的目标区域
作者:王抒伟 编辑:王抒伟 算了 爱看多久看多久 零 参考目录: 1.获取图片 2.转换灰度并去噪声 3.提取图像的梯度 4.我们继续去噪声 5.图像形态学(牛逼吧、唬人的) 6.细节刻画 7.找出昆虫区域的轮廓 8.画出轮廓 9.裁剪出来就完成啦 一 第一天: 老师:你知道么,今天有人问了我一个问题。 ~.我:什么? 老师:他说很难。 ~.我:关于什么的? 老师:图像处理。 ~.我:喔,你说说看,我确实做了不少图像处理的东西(心里默念,你不知知道你给过我多少图像吗?) 老师:好嘞!在用深度学习的时候,
机器学习算法工程师
2018/03/06
13.1K1
OpenCV从零基础---检测及分割图像的目标区域
基于OpenCV的实时车道检测
自动驾驶汽车是人工智能领域最具颠覆性的创新之一。它们借助深度学习算法不断推动社会发展,并在移动领域创造新的机遇。自动驾驶汽车可以去任何传统汽车可以去的地方,也能像经验丰富的人类驾驶员一样完成各种操作。但是,正确的训练是非常重要的。在自动驾驶汽车的训练过程中,车道检测是其中的一个重要步骤,也是最初要完成的步骤。今天,我们将学习如何使用视频进行车道检测。
一点人工一点智能
2023/08/21
9980
基于OpenCV的实时车道检测
OpenCV系列之霍夫线变换 | 三十二
如果可以用数学形式表示形状,则霍夫变换是一种检测任何形状的流行技术。即使形状有些破损或变形,也可以检测出形状。我们将看到它如何作用于一条线。
磐创AI
2019/12/23
1.4K0
OpenCV系列之霍夫线变换 | 三十二
使用YOLO11和霍夫变换追踪站台黄线穿越者
大家都知道,在地铁站等车时,广播里总是提醒我们:“别越过黄线哦!”但是,总有那么一些人,因为分心或者不注意,就站在了黄线边上,甚至跨了过去。这可是很危险的!今天,就让我带大家看看,怎么用人工智能来做个智能监控系统,一旦有人跨过黄线,系统就能立刻发出警告,保护大家的安全。
小白学视觉
2024/12/06
2910
使用YOLO11和霍夫变换追踪站台黄线穿越者
opencv-python图像处理常用方法整理(一)
在完成毕业设计后我再也没有碰过图像处理相关的东西,进入公司后也是作为前端开发学习和工作(于是乎才有了Vue的学习笔记),但是当我再开始做图像处理相关的事情时,我发现自己全然忘却了怎么调用函数,于是乎决定整理一份。
月落星河Tsukistar
2022/02/18
5410
opencv-python图像处理常用方法整理(一)
挑战任务: 车道检测
本次挑战内容来自Udacity自动驾驶纳米学位课程,素材中车道保持不变,车道线清晰明确,易于检测,是车道检测的基础版本,网上也有很多针对复杂场景的高级实现,感兴趣的童鞋可以自行了解。
CodecWang
2021/12/07
5330
挑战任务: 车道检测
霍夫直线变换
算法:霍夫直线变换是选择由尽可能多条线汇成的点。当霍夫坐标系内交于某点的曲线达到了阈值,即在对应的极坐标系内存在(检测到)一条直线。在霍夫坐标系中,横坐标采用笛卡儿坐标系中直线的斜率k,纵坐标使用笛卡儿坐标系中直线的截距b。笛卡儿空间内的6个点映射到霍夫空间内:
裴来凡
2022/05/28
5730
霍夫直线变换
用霍夫变换&SCNN码一个车道追踪器
大多数车道都设计得相对简单,这不仅是为了鼓励有序,还为了让人类驾驶员更容易以相同的速度驾驶车辆。因此,我们的方法可能会通过边缘检测和特征提取技术先检测出摄像机馈送回来的直线。我们将用 OpenCV(一个开源的用来实现计算机视觉算法的库)。下图是我们的方法流程的概述。
机器之心
2019/03/06
7170
用霍夫变换&SCNN码一个车道追踪器
基于Python利用OpenCV实现Hough变换的形状检测
在我们开始对图像应用霍夫变换之前,我们需要了解霍夫空间是什么,我们将通过一个例子来进行了解。
小白学视觉
2022/02/14
2.6K0
基于Python利用OpenCV实现Hough变换的形状检测
【计算机视觉】【图像处理综合应用】路沿检测
用python的OpenCV实现视频文件的处理,用videoCapture打开视频文件,读取每一帧进行处理,然后用videoWriter保存成视频。
叶茂林
2023/11/27
4970
【计算机视觉】【图像处理综合应用】路沿检测
OpenCV 图像分析之 —— 霍夫变换(Hough Transform)
Hough(霍夫)变换是一种用于检测线、圆或者图像中其他简单形状的方法。最初Hough变换是一种线变换,这是一种相对较快的检测二值图像中直线的方法,可以进一步推广到除简单线之外的情况。
为为为什么
2022/08/09
5.4K0
OpenCV 图像分析之 —— 霍夫变换(Hough Transform)
opencv(4.5.3)-python(二十九)--Hough线变换
Hough变换是一种流行的技术,可以检测任何形状。即使它是破碎的或扭曲一点点的形状,也可以检测。我们来看看它如何检测一条线。
用户9875047
2023/02/26
7710
opencv(4.5.3)-python(二十九)--Hough线变换
OpenCV与图像处理(四)
以下代码均在python3.6,opencv4.2.0环境下试了跑一遍,可直接运行。
Must
2020/07/28
6990
OpenCV与图像处理(四)
Street Lanes Finder - 检测自动驾驶汽车的车道
在今天的文章中,将使用基本的计算机视觉技术来解决对于自动驾驶汽车至关重要的街道车道检测问题。到本文结束时,将能够使用Python和OpenCV执行实时通道检测。
代码医生工作室
2019/08/01
7650
Street Lanes Finder - 检测自动驾驶汽车的车道
OpenCV 系列教程5 | OpenCV 图像处理(中)
霍夫变换是一种特征提取技术,主要应用于检测图像中的直线或者圆。 OpenCV 中分为霍夫线变换和霍夫圆变换。
机器视觉CV
2019/11/12
1.7K0
OpenCV 系列教程5 | OpenCV 图像处理(中)
实战:基于霍夫变换进行线检测
最近,我们发现自己不得不在应用程序中加入文档扫描功能。在做了一些研究之后,我们偶然发现了一篇熊英写的文章,他是Dropbox机器学习团队的成员。该文章介绍了如何Dropbox的的机器学习团队通过强调他们通过去的步骤,并在每个步骤使用的算法来实现他们的文档扫描仪。通过那篇文章,我们了解了一种称为霍夫变换的方法, 以及如何将其用于检测图像中的线条。因此,在本文中,我们想解释Hough变换算法,并提供该算法在Python中的“从头开始”的实现。
小白学视觉
2021/03/30
9690
实战:基于霍夫变换进行线检测
python进阶——自动驾驶寻找车道
1.若不知道怎么安装opencv或者使用的请看我的这篇文章(曾上过csdn综合热榜的top1):
淼学派对
2023/10/14
4900
python进阶——自动驾驶寻找车道
OpenCV学习+常用函数记录③:霍夫变换与轮廓提取
OpenCV 霍夫变换与轮廓提取 3. 霍夫变换 3.1 霍夫直线 3.2 霍夫圆 4. 轮廓提取 4.1 查找轮廓 4.2 绘制轮廓 3. 霍夫变换 首先放上霍夫变换官方文档:[霍夫直线变换官网文档] 3.1 霍夫直线 import cv2 as cv import matplotlib.pyplot as plt import numpy as np # 1. 将图片以灰度的方式读取进来 img = cv.imread("../img/weiqi.jpg", cv.IMREAD_COLOR) gr
小黑鸭
2020/11/24
1K0
相关推荐
Python opencv图像处理基础总结(六) 直线检测 圆检测 轮廓发现
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验