要做以下几件事情:

一共有多少辆车。

有多少个空余的车位。

哪个停车位被占用了,哪个停车位没有被占用。

读取图像:

image

拿到图像之后,我们需要将其预处理,低于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

image

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

image

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

image

手动选择有效区域:

def select_region(self,image):

"""

手动选择区域

"""

# first, define the polygon by vertices

rows, 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)

image

之后做一个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)

image

image

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

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

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 operator

list1 = sorted(cleaned, key=operator.itemgetter(0, 1))

#Step 3: 找到多个列,相当于每列是一排车

clusters = {}

dIndex = 0

clus_dist = 10

for 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 = 0

for 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 = 0

avg_x2 = 0

for 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 += 1

print("Num Parking Lanes: ", len(rects))

#Step 5: 把列矩形画出来

buff = 7

for 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

按列划分区域:

image

再划分更细:

image

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

image

完整代码 公众号后台回复 停车场车位识别 。

我的微信公众号名称:深度学习与先进智能决策

微信公众号ID:MultiAgent1024

公众号介绍:主要研究分享深度学习、机器博弈、强化学习等相关内容!期待您的关注,欢迎一起学习交流进步!

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

  1. java登录注册抽奖完整代码_JAVA实现用户抽奖功能(附完整代码)

    需求分析 1)实现三个基本功能:登录.注册.抽奖. 2)登录:用户输入账号密码进行登录,输入账号后会匹配已注册的用户,若输入用户不存在则退出,密码有三次输入机会,登录成功后主界面会显示已登录用户的账号 ...

  2. OpenCV演示代码以查找图像中的轮廓(附完整代码)

    OpenCV演示代码以查找图像中的轮廓 OpenCV演示代码以查找图像中的轮廓 OpenCV演示代码以查找图像中的轮廓 #include "opencv2/imgcodecs.hpp&quo ...

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

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

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

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

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

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

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

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

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

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

  8. OpenCV差分二值化的实时场景文本检测的实例(附完整代码)

    OpenCV差分二值化的实时场景文本检测的实例 OpenCV差分二值化的实时场景文本检测的实例 OpenCV差分二值化的实时场景文本检测的实例 OpenCV差分二值化的实时场景文本检测的实例(附完整代 ...

  9. 单选按钮_PerlTk教程之按钮Button、复选按钮Checkbutton、单选按钮Radiobutton(附完整代码)...

    <Perl-Tk教程之按钮Button.复选按钮Checkbutton.单选按钮Radiobutton>Perl-Tk中有三种不同形式的按钮组件可供选择,它们分别是按钮(Button), ...

  10. c++ 三次多项式拟合_线性回归进阶版,多项式线性回归讲解与实现(附完整代码)...

    每天给小编五分钟,小编用自己的代码,带你轻松学习深度学习!本文将会带你做完一个深度学习进阶版的线性回归---多项式线性回归,带你进一步掌握线性回归这一深度学习经典模型,然后在此基础上,小编将在下篇文章 ...

最新文章

  1. 关于Silverlight安装问题之二
  2. 数据结构学习笔记4.1--查找节点
  3. python免费试听-小栈春季编程免费试听课 倒数6天!
  4. erl0007 - erlang 远程节点连接的两种方式
  5. linux中yum源的配置和使用
  6. 织梦内容管理系统(DedeCMS)
  7. Android获取网络状态
  8. javascript概要
  9. php如何判断是否为json格式,php如何判断是否为json数据(格式)
  10. 机刷实名认证软件_代刷网已上架抖音代实名认证和抖音音乐人认证
  11. 【软件】RustDesk自己搭建远程控制服务软件 支持控制手机
  12. Blender软件介绍与使用心得
  13. android课程设计健身,健身软件课程设计_毕业论文设计.doc
  14. Java笔记 - 网络编程
  15. iphone7运行linux,我在iPhone7装入了Linux系统!
  16. ORALC常用函数(五)----STDDEV、STDDEV_POP、STDDEV_SAMP等函数
  17. kali网络渗透实验一:网络扫描与网络侦查
  18. mysql datetime 计算相隔时间
  19. Android 最完美的取色盘ColorPickView
  20. 考试系统怎么用?如何安装到电脑?

热门文章

  1. 在mybatis xml编写sql语句时,同时使用AND和OR注意
  2. 电子邮件服务建设计算机网络,电子邮件(E-mail)、网页(Web Page)、搜索引擎(Search Engine)是最为普遍的计算机网络服务的例_搜题易...
  3. 如何远程管理服务器详解
  4. 第一次ThoughtWorks欧亚工作室的集体活动
  5. 牛牛去买球 思维+背包
  6. PHPMailer 服务器发送邮件出现Could not connect to SMTP host错误 解决办法
  7. TLSv1.2抓包解密分析过程之DHE_RSA_WITH_AES_128_CBC_SHA256
  8. 2024级管理类联考之英语二2200核心词汇(第五天)
  9. java date详解_最新Java中Date类型详解
  10. VMware ESXi 6.7 添加驱动