android智慧停车场代码,计算机视觉实战(十三)停车场车位识别(附完整代码)
要做以下几件事情:
一共有多少辆车。
有多少个空余的车位。
哪个停车位被占用了,哪个停车位没有被占用。
读取图像:
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智慧停车场代码,计算机视觉实战(十三)停车场车位识别(附完整代码)相关推荐
- java登录注册抽奖完整代码_JAVA实现用户抽奖功能(附完整代码)
需求分析 1)实现三个基本功能:登录.注册.抽奖. 2)登录:用户输入账号密码进行登录,输入账号后会匹配已注册的用户,若输入用户不存在则退出,密码有三次输入机会,登录成功后主界面会显示已登录用户的账号 ...
- OpenCV演示代码以查找图像中的轮廓(附完整代码)
OpenCV演示代码以查找图像中的轮廓 OpenCV演示代码以查找图像中的轮廓 OpenCV演示代码以查找图像中的轮廓 #include "opencv2/imgcodecs.hpp&quo ...
- Android实战:网易新闻(附完整代码)
一.源码地址:https://github.com/ambition-hb/News_1 二.部分内容效果图如下: (1)广告页面 (2)新闻界面 (3)热点新闻 (4)热点新闻详情界面 (5)新闻页 ...
- php 3d animation,css3D+动画的例子(附完整代码)
本篇文章给大家带来的内容是关于css3D+动画的例子(附完整代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 前言 最近玩了玩用css来构建3D效果,写了几个demo,所以博客总 ...
- Py之pygame:有趣好玩—利用pygame库实现鱼儿自动实时目标跟踪(附完整代码)
Py之pygame:有趣好玩-利用pygame库实现鱼儿自动实时目标跟踪(附完整代码) 目录 输出结果 实现代码 输出结果 实现代码 #Py之pygame:利用pygame库实现鱼儿自动实时目标跟踪i ...
- c++代码好玩_Py之pygame:有趣好玩—利用pygame库实现鱼儿自动实时目标跟踪(附完整代码)...
Py之pygame:有趣好玩-利用pygame库实现鱼儿自动实时目标跟踪(附完整代码) 目录 输出结果 实现代码 输出结果 实现代码 #Py之pygame:利用pygame库实现鱼儿自动实时目标跟 ...
- OpenCV基本线性变换轨迹栏的实例(附完整代码)
OpenCV基本线性变换轨迹栏的实例 OpenCV基本线性变换轨迹栏的实例 OpenCV基本线性变换轨迹栏的实例 OpenCV基本线性变换轨迹栏的实例(附完整代码) #include "op ...
- OpenCV差分二值化的实时场景文本检测的实例(附完整代码)
OpenCV差分二值化的实时场景文本检测的实例 OpenCV差分二值化的实时场景文本检测的实例 OpenCV差分二值化的实时场景文本检测的实例 OpenCV差分二值化的实时场景文本检测的实例(附完整代 ...
- 单选按钮_PerlTk教程之按钮Button、复选按钮Checkbutton、单选按钮Radiobutton(附完整代码)...
<Perl-Tk教程之按钮Button.复选按钮Checkbutton.单选按钮Radiobutton>Perl-Tk中有三种不同形式的按钮组件可供选择,它们分别是按钮(Button), ...
- c++ 三次多项式拟合_线性回归进阶版,多项式线性回归讲解与实现(附完整代码)...
每天给小编五分钟,小编用自己的代码,带你轻松学习深度学习!本文将会带你做完一个深度学习进阶版的线性回归---多项式线性回归,带你进一步掌握线性回归这一深度学习经典模型,然后在此基础上,小编将在下篇文章 ...
最新文章
- 关于Silverlight安装问题之二
- 数据结构学习笔记4.1--查找节点
- python免费试听-小栈春季编程免费试听课 倒数6天!
- erl0007 - erlang 远程节点连接的两种方式
- linux中yum源的配置和使用
- 织梦内容管理系统(DedeCMS)
- Android获取网络状态
- javascript概要
- php如何判断是否为json格式,php如何判断是否为json数据(格式)
- 机刷实名认证软件_代刷网已上架抖音代实名认证和抖音音乐人认证
- 【软件】RustDesk自己搭建远程控制服务软件 支持控制手机
- Blender软件介绍与使用心得
- android课程设计健身,健身软件课程设计_毕业论文设计.doc
- Java笔记 - 网络编程
- iphone7运行linux,我在iPhone7装入了Linux系统!
- ORALC常用函数(五)----STDDEV、STDDEV_POP、STDDEV_SAMP等函数
- kali网络渗透实验一:网络扫描与网络侦查
- mysql datetime 计算相隔时间
- Android 最完美的取色盘ColorPickView
- 考试系统怎么用?如何安装到电脑?
热门文章
- 在mybatis xml编写sql语句时,同时使用AND和OR注意
- 电子邮件服务建设计算机网络,电子邮件(E-mail)、网页(Web Page)、搜索引擎(Search Engine)是最为普遍的计算机网络服务的例_搜题易...
- 如何远程管理服务器详解
- 第一次ThoughtWorks欧亚工作室的集体活动
- 牛牛去买球 思维+背包
- PHPMailer 服务器发送邮件出现Could not connect to SMTP host错误 解决办法
- TLSv1.2抓包解密分析过程之DHE_RSA_WITH_AES_128_CBC_SHA256
- 2024级管理类联考之英语二2200核心词汇(第五天)
- java date详解_最新Java中Date类型详解
- VMware ESXi 6.7 添加驱动