要做以下几件事情:

  1. 一共有多少辆车。
  2. 有多少个空余的车位。
  3. 哪个停车位被占用了,哪个停车位没有被占用。

  读取图像:

  拿到图像之后,我们需要将其预处理,低于120,或者高于255的都处理为0。

def select_rgb_white_yellow(self,image): #过滤掉背景lower = np.uint8([120, 120, 120])upper = np.uint8([255, 255, 255])# lower_red和高于upper_red的部分分别变成0,lower_red~upper_red之间的值变成255,相当于过滤背景white_mask = cv2.inRange(image, lower, upper)self.cv_show('white_mask',white_mask)masked = cv2.bitwise_and(image, image, mask = white_mask)self.cv_show('masked',masked)return masked

  然后再将其与原始图像做与操作,这样的话,只有原始图像是255的像素点留下来了。

  然后再做灰度处理,再做边缘检测:

  手动选择有效区域:

def select_region(self,image):"""手动选择区域"""# first, define the polygon by verticesrows, cols = image.shape[:2]pt_1  = [cols*0.05, rows*0.90]pt_2 = [cols*0.05, rows*0.70]pt_3 = [cols*0.30, rows*0.55]pt_4 = [cols*0.6, rows*0.15]pt_5 = [cols*0.90, rows*0.15] pt_6 = [cols*0.90, rows*0.90]vertices = np.array([[pt_1, pt_2, pt_3, pt_4, pt_5, pt_6]], dtype=np.int32) point_img = image.copy()       point_img = cv2.cvtColor(point_img, cv2.COLOR_GRAY2RGB)for point in vertices[0]:cv2.circle(point_img, (point[0],point[1]), 10, (0,0,255), 4)self.cv_show('point_img',point_img)return self.filter_region(image, vertices)

  之后做一个mask填充,然后将其分割出来:

def filter_region(self,image, vertices):"""剔除掉不需要的地方"""mask = np.zeros_like(image)if len(mask.shape)==2:cv2.fillPoly(mask, vertices, 255)self.cv_show('mask', mask)    return cv2.bitwise_and(image, mask)

  再利用霍夫变换检测直线,再过滤一些:

def hough_lines(self,image):#输入的图像需要是边缘检测后的结果#minLineLengh(线的最短长度,比这个短的都被忽略)和MaxLineCap(两条直线之间的最大间隔,小于此值,认为是一条直线)#rho距离精度,theta角度精度,threshod超过设定阈值才被检测出线段return cv2.HoughLinesP(image, rho=0.1, theta=np.pi/10, threshold=15, minLineLength=9, maxLineGap=4)
def draw_lines(self,image, lines, color=[255, 0, 0], thickness=2, make_copy=True):# 过滤霍夫变换检测到直线if make_copy:image = np.copy(image) cleaned = []for line in lines:for x1,y1,x2,y2 in line:if abs(y2-y1) <=1 and abs(x2-x1) >=25 and abs(x2-x1) <= 55:cleaned.append((x1,y1,x2,y2))cv2.line(image, (x1, y1), (x2, y2), color, thickness)print(" No lines detected: ", len(cleaned))return image

def identify_blocks(self,image, lines, make_copy=True):if make_copy:new_image = np.copy(image)#Step 1: 过滤部分直线cleaned = []for line in lines:for x1,y1,x2,y2 in line:if abs(y2-y1) <=1 and abs(x2-x1) >=25 and abs(x2-x1) <= 55:cleaned.append((x1,y1,x2,y2))#Step 2: 对直线按照x1进行排序import operatorlist1 = sorted(cleaned, key=operator.itemgetter(0, 1))#Step 3: 找到多个列,相当于每列是一排车clusters = {}dIndex = 0clus_dist = 10for i in range(len(list1) - 1):distance = abs(list1[i+1][0] - list1[i][0])if distance <= clus_dist:if not dIndex in clusters.keys(): clusters[dIndex] = []clusters[dIndex].append(list1[i])clusters[dIndex].append(list1[i + 1]) else:dIndex += 1#Step 4: 得到坐标rects = {}i = 0for key in clusters:all_list = clusters[key]cleaned = list(set(all_list))if len(cleaned) > 5:cleaned = sorted(cleaned, key=lambda tup: tup[1])avg_y1 = cleaned[0][1]avg_y2 = cleaned[-1][1]avg_x1 = 0avg_x2 = 0for tup in cleaned:avg_x1 += tup[0]avg_x2 += tup[2]avg_x1 = avg_x1/len(cleaned)avg_x2 = avg_x2/len(cleaned)rects[i] = (avg_x1, avg_y1, avg_x2, avg_y2)i += 1print("Num Parking Lanes: ", len(rects))#Step 5: 把列矩形画出来buff = 7for key in rects:tup_topLeft = (int(rects[key][0] - buff), int(rects[key][1]))tup_botRight = (int(rects[key][2] + buff), int(rects[key][3]))cv2.rectangle(new_image, tup_topLeft,tup_botRight,(0,255,0),3)return new_image, rects

  按列划分区域:

  再划分更细:

  之后再构建神经网络,对方框里面的图片进行分类。

  完整代码 :https://github.com/ZhiqiangHo/Opencv-Computer-Vision-Practice-Python-

我的微信公众号名称:深度学习与先进智能决策
微信公众号ID:MultiAgent1024
公众号介绍:主要研究分享深度学习、机器博弈、强化学习等相关内容!期待您的关注,欢迎一起学习交流进步!

计算机视觉实战(十三)停车场车位识别(附完整代码)相关推荐

  1. OpenCV计算机视觉实战,停车场车位识别!(完整代码)!

    任务描述:识别这种停车场图的 空车位 与 被占用车位 识别流程:预处理 -> 获得车位坐标的字典 -> 训练VGG网络进行二分类 img_process 图像预处理过程 1.select_ ...

  2. 【车位检测】基于计算机视觉实现停车场空位识别附matlab代码

    1 简介 为便于汽车驾驶员在室外停车场中寻找可用空车位,基于以数据采集,图像处理和目标检测等过程的计算机视觉,开发了室外停车场车位检测实验.​ 2 部分代码 clc; close all; clear ...

  3. Android实战:网易新闻(附完整代码)

    一.源码地址:https://github.com/ambition-hb/News_1 二.部分内容效果图如下: (1)广告页面 (2)新闻界面 (3)热点新闻 (4)热点新闻详情界面 (5)新闻页 ...

  4. CV项目肢体动作识别(三)内附完整代码和详细讲解

    CV项目肢体动作识别(三)内附完整代码和详细讲解 首先我还是给出完整的代码,然后再进行详细的讲解.这一次我们用模块化的思想,把一个功能模块化(moudle),这种思想在工程中非常常见,在分工中你需要做 ...

  5. 知识图谱实战案例完全剖析(附完整源码和数据集)-张子良-专题视频课程

    知识图谱实战案例完全剖析(附完整源码和数据集)-2070人已学习 课程介绍         课程定位:系统学习知识图谱的佳实践: 系统学习:完全覆盖知识建模.图数据库.知识应用和知识获取: 实战指引: ...

  6. Python数据可视化:2018年北上广深空气质量分析(附完整代码)

    ♚ 法纳斯特,Python爱好者,喜欢爬虫,数据分析以及可视化. 就在这周偶然看到一个学弟吐槽天津的空气,不禁想起那段厚德载雾,自强不吸的日子. 无图无真相,下图为证. 左边的图是去年2月份的时候,这 ...

  7. php 3d animation,css3D+动画的例子(附完整代码)

    本篇文章给大家带来的内容是关于css3D+动画的例子(附完整代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 前言 最近玩了玩用css来构建3D效果,写了几个demo,所以博客总 ...

  8. Py之pygame:有趣好玩—利用pygame库实现鱼儿自动实时目标跟踪(附完整代码)

    Py之pygame:有趣好玩-利用pygame库实现鱼儿自动实时目标跟踪(附完整代码) 目录 输出结果 实现代码 输出结果 实现代码 #Py之pygame:利用pygame库实现鱼儿自动实时目标跟踪i ...

  9. c++代码好玩_Py之pygame:有趣好玩—利用pygame库实现鱼儿自动实时目标跟踪(附完整代码)...

    Py之pygame:有趣好玩-利用pygame库实现鱼儿自动实时目标跟踪(附完整代码) 目录 输出结果 实现代码 输出结果 ​ 实现代码 #Py之pygame:利用pygame库实现鱼儿自动实时目标跟 ...

  10. OpenCV基本线性变换轨迹栏的实例(附完整代码)

    OpenCV基本线性变换轨迹栏的实例 OpenCV基本线性变换轨迹栏的实例 OpenCV基本线性变换轨迹栏的实例 OpenCV基本线性变换轨迹栏的实例(附完整代码) #include "op ...

最新文章

  1. 记录下Linux难记实用的命令
  2. python中import sys_python import sys出错怎么办
  3. 机器学习 | 算法笔记- 集成学习(Ensemble Learning)
  4. Alpha 冲刺 (1/10)
  5. IDEA启动hadoop报Could not locate executable null\bin\winutils.exe in the Hadoop binaries.错误的解决办法
  6. spring boot(十五)spring boot+thymeleaf+jpa增删改查示例
  7. 请求重定向与请求转发的比较(HttpServletResponse.sendRedirect方法和RequestDispatcher.forward方法)...
  8. ArcGIS Server服务介绍与服务在js中的使用
  9. mysql sharding 知乎_分库分表系列(1)-shardingsphere核心概念
  10. codeforces 584E Anton and Ira [想法题]
  11. 01--DNS服务器2
  12. 微信小程序引入iconfont实现添加自定义颜色图标
  13. 知识表示学习 TransE 代码逻辑梳理 超详细解析
  14. WEB免费打印控件推荐(4款)
  15. python滑稽脸_使用python的turtle绘画滑稽脸实例
  16. nginx流媒体服务器性能,搭建nginx流媒体服务器(支持HLS)
  17. ServiceMesh实战-服务网格是什么?
  18. 解决VMware和VMbox实体机和虚拟机无法复制粘贴的问题
  19. 论OSPF中ASBR和ABR
  20. Android开发周报:Android Studio2.0发布、Activity动态创建

热门文章

  1. secure CRT连接华三、华为模拟器
  2. 常用网络协议的端口号
  3. 网络工程师Day7--本地AAA配置
  4. HCIE Secuirty 防火墙IPS功能和NIP 备考笔记(幕布)
  5. 华三 h3c ospf、rip 路由引入和路由策略
  6. 窥探源码,让我更加优雅的使用Kafka生产者!
  7. 解决连接本地oracle无监听的问题
  8. SQL时间相关 - SQL日期,时间比较(转)
  9. 运营前线2:一线运营专家的运营方法、技巧与实践03 3步策略做好内容管理
  10. java 常见关键字的使用