当前位置: 首页 > news >正文

经典网站域名深圳建设项目信息网

经典网站域名,深圳建设项目信息网,商城网站怎么建设,网站开发包括后台 前台视频车流量识别基本思想是使用背景消去算法将运动物体从图片中提取出来#xff0c;消除噪声识别运动物体轮廓#xff0c;最后#xff0c;在固定区域统计筛选出来符合条件的轮廓。 基于统计背景模型的视频运动目标检测技术#xff1a; 背景获取#xff1a;需要在场景存在…视频车流量识别基本思想是使用背景消去算法将运动物体从图片中提取出来消除噪声识别运动物体轮廓最后在固定区域统计筛选出来符合条件的轮廓。 基于统计背景模型的视频运动目标检测技术 背景获取需要在场景存在运动目标的情况下获得背景图像背景扰动背景中可以含有轻微扰动的对象如树枝、树叶的摇动扰动部分不应该被看做是前景运动目标外界光照变化一天中不同时间段光线、天气等的变化对检测结果的影响背景中固定对象的移动背景里的固定对象可能移动如场景中的一辆车开走、一把椅子移走对象移走后的区域在一段时间内可能被误认为是运动目标但不应该永远被看做是前景运动目标视频抖动影响视频抖动容易造成背景被识别出来出现大面积移动物体需要提前进行防抖处理阴影的影响通常前景目标的阴影也被检测为运动目标的一部分这样将影响对运动目标的进一步处理和分析 视频运动目标检测识别OpenCV技术过程如下面流程图所示较为复杂。主要是图像形态学。 首先通过高速公路上的摄像头获取到一段车流量视频先预处理利用灰度线性变换为了只关注视频中车辆移动的特征不关注不同车辆的不同颜色的干扰特征然后对灰度视频去除背景进一步抑制车辆外的其他特征接着进行高斯滤波降噪得到噪声很少的二值化黑白视频。然后进行腐蚀膨胀闭运算等形态学的相关操作进一步完善我们近景移动车辆的特征抑制其他无关特征。接着通过外接矩形框的方式对近景的每辆车查找轮廓确定检测线的高度将外接矩形框抽象为一点设置检测线的偏移量来进一步提高车辆统计的精度。结果 我们获取到的视频中所有车辆都能通过经过检测线的形式来准确记录。结论 基于opencv的车辆检测与计数能够将摄像头记录的视频中车辆信息给精确记录但是对部分车辆的精确度还不够高通过之后的改进可以运用到我们的实际生活中完善我们的智能交通管理体系。 1. 图像形态学概述 图像形态学操作是指基于形状的一系列图像处理操作的合集主要是基于集合论基础上的形态学数学对图像进行处理。 形态学有四个基本操作腐蚀、膨胀、开操作、闭操作膨胀与腐蚀是图像处理中最常用的形态学操作手段。 膨胀的原理 膨胀操作是将图像中的物体边缘膨胀或者扩张。他将原始图像中的每个像素替换为它的相邻像素中的最大值。膨胀可以使物体变得更加的粗壮或者消除小的孤立区域。 腐蚀的原理 腐蚀操作是将图像中的物体边缘腐蚀或者缩小。他将原始图像中的每个像素替换为它的相邻像素中的最小值。腐蚀可以使物体变得更加细小或者消除小的噪声点。 开操作先腐蚀后膨胀可以去掉小的对象。 闭操作先膨胀后腐蚀可以填充小对象。 2. OepnCV实现过程 2.1. 视频获取与处理 2.1.1. 视频防抖处理 详见OpenCV防抖实践及代码解析笔记此处略过。 2.1.1. 摄像头捕获图像的主要函数 cv2.VideoCapture(x)——默认x填为0作为启用本机摄像头——你可以设置1启用其它摄像头/甚至可以传入文件cap.isOpened()——判断是否摄像设备/视频源是否打开——打开返回truecap.read()——读取视频源/设备读取的数据的帧图像——返回两个参数第一个为是否读取到帧图像第二个为帧图像imshow(x,y)——这里用来显示读取到的帧图像——前参数为窗口标题后参数为图像。 2.2. 图像去背景及转灰度 2.2.1. 图像去背景简明原理及定义 视频去背景又叫视频背景扣除也叫视频前后景分割和提取。对于视频来说是以时间轴为顺序每张图片前后有一个关联关系。如果图片的像素在一段时间内不发生变化我们就认为这个像素是背景色如果发生频繁的变化我们就认为是前景色。这是视频去背景算法的原理但也会有一些缺点比如一棵树在风吹的时候那这颗树就从背景识别成了前景。 MOG去背景APIcv2.bgsegm.createBackgroundSubtractorMOG([history, nminxtures, backgroundRatio, noiseSigma]) creatBackgroundSubtractorMOG()是以混合高斯模型为基础的前后景分割算法是一个类放在opencv下面的一个子包bgsegm里我们可以通过这个类创建一个mog对象。 history表示建模时需要多长时间的参考帧默认是200毫秒。假设视频的播放速度是一秒钟显示25张图片也就是25帧那么建模参考的图片就是5张。nminxtures高斯值范围默认是5就是把一张图片分成5x5个小块每个小块都有一个高斯值然后算出一个参考模型backgroundRatio背景比例就是背景在整张图片中的占比默认是0.7就是默认一张图中70%是背景。noiseSigma噪音的参数这个参数设置为0就是自动降噪默认值也是0 一般情况下我们使用这个类时一般都用默认参数即可默认值下效果就比较不错了。 MOG2算法也是高斯混合模型分离算法是MOG的改进算法。它基于Z.Zivkovic发布的两篇论文即2004年发布的“Improved adaptive Gausian mixture model for background subtraction”和2006年发布的“Efficient Adaptive Density Estimation per Image Pixel for the Task of Background Subtraction”中提出。该算法的一个重要特征是 它为每个像素选择适当数量的高斯分布它可以更好地适应不同场景的照明变化等。 2.2.2. 图像转灰度 把图像转换为灰度图像后进行高斯平滑处理去噪声。 2.2.3. 高斯滤波 GaussianBlur()为了减少图像中的噪声。在边缘检测中必须计算像素强度的数值导数这通常会导致“噪声”边缘。换句话说图像中相邻像素尤其是靠近边缘的强度可能会波动很大从而产生不代表我们正在寻找的主要边缘结构的边缘。 模糊可以平滑边缘附近的强度变化从而更容易识别图像中的主要边缘结构。 dstcv2.GaussianBlursrc,ksize,sigmaX,sigmaY,borderType 参数 dst是返回值表示进行高斯滤波后得到的处理结果。src 是需要处理的图像即原始图像。它能够有任意数量的通道并能对各个通道 独立处理。图像深度应该是CV_8U、CV_16U、CV_16S、CV_32F 或者 CV_64F中的一 种。ksize 是滤波核的大小。滤波核大小是指在滤波处理过程中其邻域图像的高度和宽 度。需要注意滤波核的值必须是奇数。sigmaX 是卷积核在水平方向上X 轴方向的标准差其控制的是权重比例。sigmaY是卷积核在垂直方向上Y轴方向的标准差。如果将该值设置为0则只采用sigmaX的值borderType是边界样式该值决定了以何种方式处理边界。一般情况下不需要考虑该值直接采用默认值即可。 在该函数中sigmaY和borderType是可选参数。sigmaX是必选参数但是可以将该参数设置为0让函数自己去计算sigmaX的具体值。 在实际使用中高斯滤波使用的可能是不同大小的卷积核核的宽度和高度可以不相同但是它们都必须是奇数可以根据使用需求选定合适的卷积核。 2.2.4. 去背景二值化 我们需要使用函数:cv2.createBackgroundSubtractorMOG() 创建一个背景对象。这个函数有些可选参数比如要进行建模场景的时间长度高斯混合成分的数量阈值等。将他们全部设置为默认值。然后在整个视频中我们是需要使用backgroundsubtractor.apply() 就可以得到前景的掩模了。 移动的物体会被标记为白色背景会被标记为黑色的前景的掩模就是白色的了。 2.3. 图像形态学处理过程 2.3.1. 定义卷积核 cv2.getStructuringElement(shape ksize) 返回指定形状和尺寸的结构元素。 参数 shape代表形状类型 cv2. MORPH_RECT矩形结构元素所有元素值都是1cv2. MORPH_CROSS十字形结构元素对角线元素值都是1cv2. MORPH_ELLIPSE椭圆形结构元素 ksize代表形状元素的大小 2.3.2. 腐蚀 dst cv.erode( src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]] ) 参数 src是输入图像 通道数可以是任意的图像类型应该是以下几种类型中的其中之一CV_8U, CV_16U, CV_16S, CV_32F or CV_64F。dst是输出图像与 SRC 大小和类型相同。kernel是用于腐蚀的结构元件;如果 elementMat则使用 3 x 3 矩形结构元素。内核可以使用 getStructuringElement 函数获得。anchor是锚点在元素中的位置;默认值 -1 -1 表示定位点位于元素中心。iterations是施加腐蚀的次数。borderType是像素外推法参考 BorderTypesborderValue 常量边框情况下的边框值 腐蚀将前景物体变小理解成将图像断开裂缝变大它沿着物体边界移除像素并缩小物体的大小会增强图像的暗部。在图片上画上黑色印记印记越来越大去掉微小的移动物体。 2.3.3. 膨胀 cv2.dilate(img, kernel, iteration) 参数 img是目标图片kernel是进行操作的内核默认为3×3的矩阵iterations是膨胀次数默认为1 膨胀将前景物体变大理解成将图像断开裂缝变小通过将像素添加到该图像中的对象的感知边界扩张放大图像中的明亮白色区域。在图片上画上黑色印记印记越来越小把抓取到的物体变大。 2.3.4. 开闭运算 morphologyEx(src,op,kernel,dst None,anchor None,iterations None,borderType None,borderValue None) 参数 src是输入图像输入图像的通道数是任意的。op是形态操作的类型 cv2.MORPH_ERODE腐蚀cv2.MORPH_DILATE膨胀cv2.MORPH_OPEN开运算)cv2.MORPH_CLOSE闭元素 kernel是输入一个数组作为核。能被getStructuringElement创建。anchor是核的锚点位置负值说明该锚点位于核中心。默认为核中心。iterations是整型int。腐蚀与膨胀被应用的次数。默认为None。 2.4. 边缘检测及识别轮廓 在边缘检测中必须计算像素强度的数值导数这通常会导致“噪声”边缘从而产生不代表我们正在寻找的主要边缘结构的边缘。 模糊可以平滑边缘附近的强度变化从而更容易识别图像中的主要边缘结构。详见GaussianBlur()。 2.4.1. 边缘检测基本原理 在数学中函数的变化率由导数来刻画图像我们看成二维函数其上面的像素值变化当然也可以用导数来刻画当然图像是离散的那我们换成像素的差分来实现。 对于阶跃型边缘其一阶导数具有极大值极大值点对应二阶导数的过零点也就是准确的边缘的位置是对应于一阶导数的极大值点或者二阶导数的过零点注意不仅仅是二阶导数为0值的位置而且是正负值过渡的零点。 故边缘检测算子的类型当然就存在一阶和二阶微分算子。常见边缘检测算子Roberts 、Sobel 、Prewitt、Laplacian、Log/Marr、Canny、Kirsch、Nevitia。 2.4.2. OpenCV轮廓检测 contours, hierarchy cv2.findContours(image,mode,method) 参数 image是输入图像mode是轮廓的模式 cv2.RETR_EXTERNAL只检测外轮廓cv2.RETR_LIST检测的轮廓不建立等级关系cv2.RETR_CCOMP建立两个等级的轮廓上一层为外边界内层为内孔的边界。如果内孔内还有连通物体则这个物体的边界也在顶层cv2.RETR_TREE建立一个等级树结构的轮廓。 method是轮廓的近似方法 cv2.CHAIN_APPROX_NOME存储所有的轮廓点相邻的两个点的像素位置差不超过1cv2.CHAIN_APPROX_SIMPLE压缩水平方向、垂直方向、对角线方向的元素只保留该方向的终点坐标例如一个矩形轮廓只需要4个点来保存轮廓信息cv2.CHAIN_APPROX_TC89_L1cv2.CV_CHAIN_APPROX_TC89_KCOS contours是返回的轮廓hierarchy是每条轮廓对应的属性 2.5. 画轮廓线与统计计数线 2.5.1. 画方框 cv2.rectangle(img, pt1, pt2, color, thickness, lineType, shift ) 参数表示依次为 图片长方形框左上角坐标, 长方形框右下角坐标 字体颜色字体粗细。 在图片img上画长方形坐标原点是图片左上角向右为x轴正方向向下为y轴正方向。左上角xy右下角xy 颜色(B,G,R), 线的粗细。 2.5.2. 画直线 cv2.line(img, pt1, pt2, color[, thickness[, lineType[, shift]]]) img背景图pt1直线起点坐标pt2直线终点坐标color当前绘画的颜色。如在BGR模式下传递(255,0,0)表示蓝色画笔。灰度图下只需要传递亮度值即可。thickness画笔的粗细线宽。若是-1表示画封闭图像如填充的圆。默认值是1.lineType线条的类型 3. 实践代码 import cv2 import numpy as npcap cv2.VideoCapture(rvideo1_1.mp4) #加载视频文件 第2.1章知识点 bgsubmog cv2.bgsegm.createBackgroundSubtractorMOG() #视频去背景第2.2章知识点 kernel cv2.getStructuringElement(cv2.MORPH_RECT, (5,5)) #设置形态学处理的kernel5x5的矩形即可第八章知识点min_w 90 #大轮廓和小轮廓的分界点 min_h 90 #大轮廓和小轮廓的分界点 cars [] #汽车轮廓的中心点坐标 line_height 190 #红计数线位置 offset 10 #计数线上下的偏移量 carnum 0 #车辆计数#------------用while循环读取视频中的图像帧并处理------------ while True: #如果读取成功就将捕获的视频帧显示在video窗口里如果读取不成功就打印出warning并退出循环ret, frame cap.read() #cap对象的.read()方法if ret:cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) #转成灰度图像blur cv2.GaussianBlur(frame, (3,3), 5,5) #高斯平滑去噪第2.2.3章知识点##gray cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 获取灰度图像——cvtColor颜色控制返回一个图像#cv2.imshow(video0, gray) mask bgsubmog.apply(blur) #去背景,背景去掉后留下都是动的物体比如汽车、刮风动的树、草等下面是形态学处理去除树和草cv2.imshow(video1, blur)erode cv2.erode(mask, kernel) #腐蚀去掉小的斑块腐蚀后草就不见了树有时还能看到cv2.imshow(video2, erode)dilate cv2.dilate(erode, kernel, iterations3) #膨胀3次还原放大因为腐蚀后物体变小了不利于我们计算。close cv2.morphologyEx(dilate, cv2.MORPH_CLOSE, kernel, iterations2) #闭操作2次去掉汽车内部的小块Acv2.imshow(video3, close)cnts, h cv2.findContours(close, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) #查找轮廓就是找到每一个移动的汽车了for c in cnts: #遍历这些轮廓(x,y, w,h) cv2.boundingRect(c) #给每个轮廓圈上矩形框这样轮廓就变成xywh四个参数了isValid (wmin_w) and (hmin_h) #去除小轮廓比如车灯的轮廓我们不需要。判断如果矩形框的最小宽高小于90就是小轮廓就忽略continueif not isValid:continue #宽高小于90的就忽略跳过继续循环如果大于90就是有效的车辆就把这个矩形框的中心点记下来cv2.rectangle(frame, (x,y), (xw, yh), (0,0,255), 2) #在原图上把大轮廓用红色矩形框圈出来x1 int(w/2) #计算大轮廓的中心点,也就是矩形框的中心点并把中心点都放到cars里面y1 int(h/2)cx x x1cy y y1cpoint (cx, cy)cars.append(cpoint)cv2.line(frame, (10,line_height), (1200, line_height), (255,255,0),2) #画一条计数线穿过计数线的车就计数for (x,y) in cars: #看cars里面的中心点是否在计数线的附近就是车经过了这个计数线我们就计数 if (y(line_heightoffset) and y(line_height-offset)):carnum 1cars[]cv2.putText(frame, Cars Count:str(carnum), (100, 70), cv2.FONT_HERSHEY_SIMPLEX, 2, (255,0,255), 5) #第18章知识点讲计数结果显示在视频上cv2.imshow(video, frame) else:print(warning: video is not load correctly or the video is finished)breakkey cv2.waitKey(1) #每一帧图像就显示一毫秒就可以然后继续循环if key 27: #27是esc的ascall码break cap.release() #释放视频资源 cv2.destroyAllWindows() #释放窗口资源4. 遇到的问题 module ‘cv2’ has no attribute ‘bgsegm’ 使用cv2时报错 AttributeError: module ‘cv2.cv2’ has no attribute ‘bgsegm’ 报错原因使用的python环境中没有安装扩展包contrib 可以通过pip或者conda安装 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-contrib-python Installing collected packages: opencv-contrib-python Successfully installed opencv-contrib-python-4.8.1.78 5. 总结 我在技术实践过程中总结出现了如下情况 移动车辆速度差别大易出现重复计数需要改进识别判断算法录制视频时注意防抖使用视频前最好进行防抖处理如果抖动较大或多的情况下这种识别技术基本不可用检测环境尽量远离路口路口环境复杂测速变化及速度差别较大拍摄视频时选择比较干净的背景尽量避开树木、桥梁、建筑物等影响。 参考 深度学习炼丹师-CXD. 基于OpenCV的车辆检测与记数. CSDN博客. 2023.06 肖爱Kun. OpenCV图像处理学习十图像的形态学操作——膨胀腐蚀. CSDN博客. 2022.08 Spark. opencv——形态学基本操作腐蚀与膨胀. CSDN博客. 2021.01 宝贝儿好. 【OpenCV 学习笔记】第二十一章: 图像及视频去背景. CSDN博客. 2022.06 JimmyHua. OpenCV图像处理-平滑处理、形态学操作. 知乎. 2019.05
http://www.ihoyoo.com/news/32516.html

相关文章:

  • 商城网站定制建设价位网站上的logo怎么做
  • 网站建设商务通什么意思在网站上做的图表怎么放到PPT里面
  • 如何提高网站排名的方法商标域名查询官网
  • SQL如何建网站微网站建设代运营
  • 简单干净的网站做交易网站需要用到的软件有哪些
  • 青岛网站开发企业无需注册免费的网站
  • 企业网站深圳如何让wordpress百度霸屏
  • 自己网站wordpress主题怎么做网站php软件
  • 网页设计培训课程哪家好郑州网站优化排名
  • 重庆高铁建设网站制作logo的软件
  • 点击最多的网站广州企业电话大全
  • 丽水建设公司网站潜江资讯网二手车
  • 海阳有没有做企业网站的如何做慕课网站
  • 天津做网站的公司排行做招聘的网站有哪些
  • 展示网站报价方案可以注册的网站
  • 可以用什么网站做mc官方桂林网页制作
  • 宁波做网站制作现在建网站赚钱吗
  • 北京网站备案代理郑州电力高等专科学校校长
  • 建设银行电商网站眼镜网站怎么做竞价
  • 主流的网站开发技术网页设计心得体会5000字
  • 济南个人网站建设可信网站行业验证必须做吗
  • dw做的网站如何发布肇庆住房和城乡建设部网站
  • 南联做网站青岛网站建设青岛新思维
  • 制作销售网站微官网是什么
  • 安徽建设相关网站网站模板设计工具
  • 网站点击率查询sketch wordpress 主题
  • 企业应该找什么样的网站建设公司苏州集团网站制作开发
  • 手机企业网站建设开发组织建设是什么意思
  • 网站开发的工作流程wordpress分类数据库参数
  • 西安市建设干部学校网站天眼查询企业信息官网电话