python 实现显著性检测_强!汽车车道视频检测:python+OpenCV为主实现

1 说明:

=====

1.1 完整版:汽车车道动态视频检测讲解和注释版代码,小白秒懂。

1.2 python+OpenCV+moviepy+numpy为主的技术要点。

1.3 代码来源:

https://github.com/linghugoogle/CarND-Advanced-Lane-Lines #虽然感觉也是fork别人的,别忘了给他点个赞star

1.4 感谢原作者,并对文件进行修改和代码进行删减,注释等操作,便于操作和理解。

1.5 应用:无人驾驶汽车技术,热门!

48a91f82640714655949482dc3847011.png

2 效果展示:由于gif≤10MB,所以是节选。

================================

2.1 原视频节选:

9644567a8da3acca119537c61ddd536c.gif

2.2 处理后视频节选:

cdeab3a8d10cd53871f9edd67f80be94.gif

3 准备:

=====

3.1 环境:python3.8+OpenCV4.2.0+deepin-linux操作系统。

3.2 文件结构:

7aa6a58c5cd282c14a2ba288b0162dbd.png

github下载下来

project_video.mp4 :原始视频,未进行标注

vedio_out:文件夹为输出被标注的视频(处理后的视频文件夹)

camera_cal:相机参数标定文件夹。

4 代码讲解:

=========

4.1 line.py代码:

# -*- coding: utf-8 -*-#导入模块import numpy as np#定义line这个类class Line():    #初始化参数    def __init__(self):        # was the line detected in the last iteration?        self.detected = False          # x values of the last n fits of the line        self.recent_fitted = [np.array([False])]        #average x values of the fitted line over the last n iterations        self.bestx = None             #polynomial coefficients averaged over the last n iterations        self.best_fit = None          #polynomial coefficients for the most recent fit        self.current_fit = [np.array([False])]          #radius of curvature of the line in some units        self.radius_of_curvature = None         #distance in meters of vehicle center from the line        self.line_base_pos = None         #difference in fit coefficients between last and new fits        self.diffs = np.array([0,0,0], dtype='float')         #x values for detected line pixels        self.allx = None          #y values for detected line pixels        self.ally = None        #检测侦测    def check_detected(self):        if (self.diffs[0] < 0.01 and self.diffs[1] < 10.0 and self.diffs[2] < 1000.) and len(self.recent_fitted) > 0:            return True        else:            return False        #更新    def update(self,fit):        if fit is not None:            if self.best_fit is not None:                self.diffs = abs(fit - self.best_fit)                if self.check_detected():                    self.detected =True                    if len(self.recent_fitted)>10:                        self.recent_fitted = self.recent_fitted[1:]                        self.recent_fitted.append(fit)                    else:                        self.recent_fitted.append(fit)                    self.best_fit = np.average(self.recent_fitted, axis=0)                    self.current_fit = fit                else:                    self.detected = False            else:                self.best_fit = fit                self.current_fit = fit                self.detected=True                self.recent_fitted.append(fit)

4.2 utils.py代码省略。

4.3 main-pipeline.py(就是代码为:pipeline.py)

# -*- coding: utf-8 -*-#第1步:导入模块import osimport cv2import matplotlib.pyplot as pltimport numpy as npfrom moviepy.editor import VideoFileClipimport line  #自定义模块import utils #自定义模块#第2步:图片阈值处理def thresholding(img):    #setting all sorts of thresholds    x_thresh = utils.abs_sobel_thresh(img, orient='x', thresh_min=10 ,thresh_max=230)    mag_thresh = utils.mag_thresh(img, sobel_kernel=3, mag_thresh=(30, 150))    dir_thresh = utils.dir_threshold(img, sobel_kernel=3, thresh=(0.7, 1.3))    hls_thresh = utils.hls_select(img, thresh=(180, 255))    lab_thresh = utils.lab_select(img, thresh=(155, 200))    luv_thresh = utils.luv_select(img, thresh=(225, 255))    #Thresholding combination    threshholded = np.zeros_like(x_thresh)    threshholded[((x_thresh == 1) & (mag_thresh == 1)) | ((dir_thresh == 1) & (hls_thresh == 1)) | (lab_thresh == 1) | (luv_thresh == 1)] = 1    return threshholded#第3步:视频拟合和图片纠正def processing(img,object_points,img_points,M,Minv,left_line,right_line):    #camera calibration, image distortion correction    undist = utils.cal_undistort(img,object_points,img_points)    #get the thresholded binary image    thresholded = thresholding(undist)    #perform perspective  transform    thresholded_wraped = cv2.warpPerspective(thresholded, M, img.shape[1::-1], flags=cv2.INTER_LINEAR)    #perform detection    if left_line.detected and right_line.detected:        left_fit, right_fit, left_lane_inds, right_lane_inds = utils.find_line_by_previous(thresholded_wraped,left_line.current_fit,right_line.current_fit)    else:        left_fit, right_fit, left_lane_inds, right_lane_inds = utils.find_line(thresholded_wraped)    left_line.update(left_fit)    right_line.update(right_fit)    #draw the detected laneline and the information    area_img = utils.draw_area(undist,thresholded_wraped,Minv,left_fit, right_fit)    curvature,pos_from_center = utils.calculate_curv_and_pos(thresholded_wraped,left_fit, right_fit)    result = utils.draw_values(area_img,curvature,pos_from_center)    return result#第4步:步骤:划线-校正-读取原视频和生成修改后的视频#划线left_line = line.Line() #左线right_line = line.Line() #右线#获取棋盘格图片#使用提供的一组棋盘格图片计算相机校正矩阵(camera calibration matrix)和失真系数(distortion coefficients).cal_imgs = utils.get_images_by_dir('/home/xgj/Desktop/v-carline-good/camera_cal')#计算object_points,img_pointsobject_points,img_points = utils.calibrate(cal_imgs,grid=(9,6))M,Minv = utils.get_M_Minv()#需要修改的视频:原视频project_video_clip = VideoFileClip("/home/xgj/Desktop/v-carline-good/project_video.mp4")#输出修改后的视频:完成视频project_outpath = '/home/xgj/Desktop/v-carline-good/vedio_out/project_video_out.mp4'#制作视频project_video_out_clip = project_video_clip.fl_image(lambda clip: processing(clip,object_points,img_points,M,Minv,left_line,right_line))project_video_out_clip.write_videofile(project_outpath, audio=False)

5 完结:

=====

5.1 以上代码完整,但制作视频估计花20分钟,我也是将代码最简化跑起来。

5.2 如果逐步深入分析,可能要从基本开始。

5.3 可以参考这篇文章:

https://zhuanlan.zhihu.com/p/46146266

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/504147.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何学习c语言 零基础20天学会C语言

C语言开发 学习C语言不是一朝一夕的事情&#xff0c;但也不需要花费十年时间才能精通。如何以最小的代价学习并精通C语言是本文的主题。请注意&#xff0c;即使是“最小的代价”&#xff0c;也绝不是什么捷径&#xff0c;而是以最短的时间取得最多的收获&#xff0c;同时也意味…

学习C/C++的简单方法

如何学习C呢。C和C是很多专业的必修课&#xff0c;尤其对计算机专业来说&#xff0c;更是重中之重。C语言是早期发展的高级语言&#xff0c;具备执行速度快&#xff0c;语法优美等特点。是底层高效率系统的首选开发语言。今天就和大家分享一下怎么学好C/C语言吧 _ 怎么学好C、…

python数据预处理代码_Python中数据预处理(代码)

本篇文章给大家带来的内容是关于Python中数据预处理&#xff08;代码&#xff09;&#xff0c;有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对你有所帮助。1、导入标准库import numpy as np import matplotlib.pyplot as plt import pandas as pd 2、…

零基础想学好C语言编程,首先要掌握的是正确的学习思路!

如果新手要学习编程&#xff0c;一些前辈都会建议从Python、PHP、Java开始学。 不过&#xff0c;有些程序员是直接从C语言强势入门编程的。 那么&#xff0c;如何学习C语言呢?下面提供4种入门C语言的方法&#xff1a; 0、刷题 绝大多数的程序员学编程的时候&#xff0c;还…

C/C++初学者快速提升?

如今&#xff0c;软件开发行业继续向前大步迈进。信息技术越来越吃香&#xff0c;越来越多人学习学习c语言&#xff0c;那么如何系统有效的学习C语言?下面分享给大家的有效学习语言的方法&#xff0c;希望可以帮到你! 一、了解大纲&#xff0c;通览教材 想学好C语言最重要的一…

pytorch 矩阵相乘_深度学习 — — PyTorch入门(三)

点击关注我哦autograd和动态计算图可以说是pytorch中非常核心的部分&#xff0c;我们在之前的文章中提到&#xff1a;autograd其实就是反向求偏导的过程&#xff0c;而在求偏导的过程中&#xff0c;链式求导法则和雅克比矩阵是其实现的数学基础&#xff1b;Tensor构成的动态计算…

codeblocks如何让输出结果 空格_简单讲讲如何实现两个正整数相加,然后输出这个结果...

首先吧&#xff0c;两个整数123 456&#xff0c;相加得到579&#xff0c;我们就得输出579&#xff0c;这个很容易操作&#xff0c;但是如果是&#xff1a;1212161596156198115645646886148461554 2671232162176217624372497590415915915029125 呢&#xff1f;long ? long lo…

C语言和其他高级语言的最大的区别是什么?

提到C语言&#xff0c;我们知道C语言和其他高级语言的最大的区别就是C语言是要操作内存的&#xff01; 我们需要知道——变量&#xff0c;其实是内存地址的一个抽像名字罢了。在静态编译的程序中&#xff0c;所有的变量名都会在编译时被转成内存地址。机器是不知道我们取的名字…

零基础学C语言必备书籍,抖音编程达人推荐(进群交流学习互动)

C语言从入门到进阶的书籍推荐。 【基础】 这本谭浩强写的【C语言程序设计】可谓是广大人事的入门书籍。我曾经用的教材就是这本&#xff0c;里面大概涵盖了 C语言 语法的 80% 。一个很适合自学的入门书。 【c prime puls】 是 C语言 最经典的入门书籍&#xff0c;极力推荐。每…

网站如何进行渠道跟踪_网站如何进行搜索引擎优化?

这是一个很一般的平台标题&#xff0c;没有任何吸引力&#xff0c;但是它真的可以被一个很好的基层站长估计的很少&#xff0c;我问一个做了多年基层站长的朋友&#xff0c;我说如何做好搜索引擎优化的SEO&#xff0c;他给我的答案很难&#xff0c;答案太大了&#xff0c;所以我…

什么是编程语言,大神教你为什么要学C语言?

首先来说说编程语言这个概念。 编程&#xff0c;其实就是让计算机听懂自己的话&#xff0c;让计算机帮自己想干的事情。编程语言&#xff0c;就是让你能够和计算机进行交流的一种语言。说白了就是让你的软件按你的命令干活。 打比方说&#xff0c;我们经常在僵尸片里面看到&a…

xshell vim 不能粘贴_linux基础知识:vim(vi)的知识

### vim三种模式命令行模式&#xff1a;在该模式下不能对文本进行- 直接编辑&#xff0c;可以输入一些操作(删除行&#xff0c;复制行&#xff0c;移动光标&#xff0c;粘贴)【打开之后默认进入的模式】编辑模式&#xff1a;在该模式下可以对文件内容进行编辑末行模式&#xff…

新手如何学习C语言/C++,教你一年时间是拿到年薪50万

最近会有一些初中高中大学的同学问&#xff0c;C语言C不知道怎么学习不会写代码怎么办&#xff1f;大致上都是一些类似的问题吧&#xff0c;回想一下自己走过的路&#xff0c;反复的了很久思考然后写了这篇文章&#xff0c;希望可以对一些迷惘新手小白程序员同学一丝帮助&#…

mac adb 找不到设备_win/Mac办公软件下载找不到资源?试试这三个强大的神器

大家好&#xff0c;我们在办公时&#xff0c;office、wps等办公软件是我们必须用到的&#xff0c;还有一些专业软件&#xff1a;CAD、PS、PROE、UG、SolidWorks、keyshot、VRay、3DsMax、Labview、Maya、AE、AI、ANSYS等也是各行各业的专业人员工作时必不可少的&#xff0c;但是…

C语言入门经验:零基础如何学习C语言?

工作中&#xff0c;接触过很多想到学习c语言而又没有一点计算机基础的人。经常有人问”我没有一点基础&#xff0c;该怎么入门c语言啊”。看过很多初学者久久摸不到门路&#xff0c;每到这个时候&#xff0c;脑海中总会浮现一个问题&#xff1a;学习c语言真的就那么难吗? 不难…

20天掌握C语言,C语言零基础到项目实战,玩转C语言

一般来说&#xff0c;和其他编程语言相比&#xff0c;C/C语言学起来会比较累&#xff0c;如果想达到项目开发的状态&#xff0c;更是需要花费很长时间的努力。那么&#xff0c;如何才能更好地把所学知识用到实际工作中去呢&#xff1f;今天小编就带大家来看看学习C/C语言到什么…

32岁了学python来的及吗_现在27岁学python来得及吗?

答案是肯定的&#xff0c;27岁学习Python语言是来得及的。 学习Python语言是当前一个比较好的选择&#xff0c;原因有以下几点&#xff1a; 第一&#xff0c;Python语言有健全的生态。Python语言虽然在最近几年被广泛关注&#xff0c;但是Python语言并不是一个新出现的语言&…

怎样快速画出一个正方体_小学数学非常有效的“画图”解题法,快速解题的“金钥匙”...

小学阶段的数学主要培养的是孩子的逻辑思维能力&#xff0c;是从形象思维逐步过度到抽象思维的过程&#xff0c;如果在小学阶段没有将基础打牢&#xff0c;那么等孩子上初中后面对更复杂的学习内容&#xff0c;就会变得更吃力。在小学数学中&#xff0c;“画图”是帮助孩子建立…

零基础入门C语言,只需2小时轻松学会!

学好C语言的秘诀就是1234&#xff1a;“一字真言&#xff0c;两种态度&#xff0c;三个框架&#xff0c;四项注意”。 如有小伙伴想自学&#xff0c;可以进群731871503进行交流 学习&#xff0c;提升编程&#xff0c;共同进步 一、一字真言 各位看官&#xff0c;学好C语言&a…

python调用百度地图画轨迹图_[宜配屋]听图阁

如题&#xff0c;先上效果图&#xff1a;主要分为两大步骤 使用python语句&#xff0c;通过百度地图API&#xff0c;对已知的地名抓取经纬度 使用百度地图API官网的html例程&#xff0c;修改数据部分&#xff0c;实现呈现效果 一、使用python语句&#xff0c;通过百度地图API&a…