手把手教学,OpenCV计算机视觉实战—停车场车位识别(完整代码),不信你还学不会

基于OpenCV构建停车场车位识别项目 OpenCV是一个基于(开源)发行的跨平台计算机视觉库,能实现图像处理和计算机视觉方面的很多通用算法。车位识别的图像处理过程如图所示。在python中设置完所有内容后, 最重要的依赖关系将是OpenCV库。通过pip将其添加到虚拟环境中,可以运行。要检查所有设置是否正确,我们可以使用以下命令打印环境中可用的当前OpenCV版本。 阅读详情

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

img_process 图像预处理过程

粉丝福利:领完再看!配套资料以及迪迦给大家准备的250G人工智能学习资料礼包(内含:两大Pytorch、TensorFlow实战框架视频、图像识别、OpenCV、计算机视觉、深度学习与神经网络等等等视频、代码、PPT以及深度学习书籍)

只需要你点个关注,然后扫码添加助手小姐姐VX即可无套路领取!

  扫码添加即可

1.select_rgb_white_yellow 过滤背景(得到mask)

inRange(图,min阈值,max阈值) 小于min(大于max)的为0,min-max的为255
dst = cv.bitwise_and(src1, src2[, dst[, mask]]
src1:图1 src2:图2 mask:图1和图2’与’操作的掩码输出图像

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

2.convert_gray_scale # rgb转gray图

3.detect_edges # Canny检测

def convert_gray_scale(self,image):
    return cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
def detect_edges(self,image, low_threshold=50, high_threshold=200):
    return cv2.Canny(image, low_threshold, high_threshold)

4.select_region # 针对当前任务手动指定区域

cv2.circle(img,中心点(x,y),半径r,color,粗细) 根据给定的圆心和半径等画圆 画出指定点

5.filter_region # 基于指定点剔除掉不需要的地方

np.zeros_like(img) # 生成一个跟img数组一样大小的 全0(黑)的数组
cv2.fillPoly(mask, vertices, 255) # 在mask上画多边形,由这vertices的点组成的,填充为白色
cv2.bitwise_and # 只在mask为255上才能留下来其他就过滤掉了

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

6.hough_lines # 找直线

HoughLinesP函数是统计概率霍夫线变换函数,该函数能输出检测到的直线的端点 (x_{0}, y_{0}, x_{1}, y_{1}),
其函数原型为:HoughLinesP(image, rho, theta, threshold[, lines[, minLineLength[, maxLineGap]]]) -> lines
cv2.HoughLinesP(边缘检测后的二值图) 统计概率霍夫线变换函数

7.draw_lines # 过滤线

abs(y2-y1) <=1 不要斜线
abs(x2-x1) >=25 and abs(x2-x1) <= 55 长度太长的也不要

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

8.identify_blocks # 区域划分

step

Python+OpenCV实战:3小时搞定计算机视觉入门(附6个实战项目源码) 本文通过Python和OpenCV实战教程,帮助读者在3小时内快速掌握计算机视觉基础,包含6个实用项目源码,涵盖图像处理、物体追踪、增强现实等核心应用场景,是计算机视觉入门的理想学习资源。 阅读详情

相关推荐

计算机视觉十大经典算法:从SIFT到YOLO的实践指南

计算机视觉作为人工智能的核心分支,旨在让机器“看懂”图像和视频。其基本原理是通过算法提取、分析和理解图像中的信息,从像素级处理到高级语义理解。在技术价值上,计算机视觉极大地提升了自动化水平和决策效率,广泛应用于自动驾驶、医疗影像、安防监控和工业质检等领域。传统算法如SIFT(尺度不变特征变换)和HOG(方向梯度直方图)奠定了特征提取和目标检测的基础,而深度学习模型如CNN(卷积神经网络)和YOLO(You Only Look Once)则推动了图像分类与实时检测的突破。本文聚焦于系统梳理计算机视觉领域的十大

weixin_30333885的博客 387

纯OpenCV实现的停车场空位检测代码包(含29张实拍图+轻量模型)

直接运行就能看效果的车位识别方案,全程用OpenCV完成图像处理:从读取监控画面开始,依次做灰度转换、高斯模糊降噪、Canny边缘提取、形态学闭运算连接断线、再筛选轮廓定位每个车位区域。最后靠像素统计或阈值判断是否停车,不依赖GPU,普通电脑就能跑。包里带29张真实停车场照片(比如spot138.jpg、scene1410.jpg这些),还有预训练好的car1.h5模型文件,以及一张带标注的with_parking.jpg方便对比效果。所有代码分步骤写清楚,关键参数像Canny高低阈值、闭运算核大小都做了注

dream的博客 226

YOLOv8停车场车位检测系统:从训练到部署完整实战

目标检测是计算机视觉领域的基础技术,其核心在于从图像中定位并分类物体。YOLOv8作为当前高效的一阶段检测算法,在精度与速度间取得良好平衡,广泛用于实时监控场景。通过车辆检测与车位区域交并比匹配,可以准确判断车位占用状态,实现停车场智能管理。一套基于YOLOv8与PyQt5的完整车位识别系统,涵盖数据集标注、模型训练、界面封装及部署流程,支持图片、视频与摄像头输入,并可实时统计剩余车位。该系统不仅适合作为毕业设计项目,也能为智慧停车提供工程参考。

weixin_42537831的博客 240

YOLO停车位识别数据集:开箱即用的停车场检测训练资源

停车位检测是智慧停车系统中的基础视觉任务,本质属于密集小目标检测范畴,需兼顾几何结构约束与多光照鲁棒性。其技术原理依赖YOLO系列模型对归一化边界框的端到端回归能力,并通过anchor适配、多尺度训练和HSV扰动优化提升小目标召回。该类数据集的核心价值在于消除数据格式转换与清洗成本,直接支持Ultralytics官方训练流程,显著缩短从数据加载到边缘部署的工程链路。典型应用场景包括停车场空位统计、AVP自动泊车定位、交通管理视频分析等。本文提供的Parking Lot YOLO版数据集,正是面向这一需求设计

weixin_29057695的博客 233

Python实战:基于OpenCV与PyQt5的智能停车场车牌识别计费系统

在计算机视觉应用中,车牌识别是一种典型的图像处理实战场景,其核心包含车牌定位、字符分割与字符识别三个环节。通过边缘检测、轮廓筛选和模板匹配等技术,系统能够从摄像头画面中提取车牌文本信息,再结合数据库与业务逻辑实现完整的停车管理闭环。这一技术广泛应用于智能停车、门禁管理、交通监控等领域,具有极高的工程实践价值。本文以Python为工具,使用OpenCV完成视觉识别,PyQt5构建图形界面,SQLite存储出入场记录,从零打造一套可落地运行的停车场计费系统,覆盖从图像预处理、特征提取到业务联动的完整链路,适合希

weixin_33824385的博客 326

OpenCV实战:Canny边缘检测与HoughLinesP实现停车场车位识别

数字图像处理中,边缘检测与直线检测是计算机视觉最基础的任务,在固定监控视角下,停车场车位占用检测可抽象为区域图像内容的变化判断。Canny边缘检测通过双阈值提取车位线轮廓,HoughLinesP概率霍夫变换则输出线段端点,无需复杂目标检测模型。随后对车位区域进行二值化与白色像素占比统计,结合帧差法自适应光照漂移,实现“空/占用”二元判定。该方案代码量小、不依赖GPU和标注数据,仅用OpenCV(Python版)的经典图像处理模块即可在普通笔记本上实时运行,特别适合作为图像处理入门实战项目。在车位线清晰、光照

weixin_29061041的博客 327

计算机视觉(十五):综合案例:垃圾分类 计算机视觉.pdf

计算机视觉(十五):综合案例:垃圾分类 计算机视觉.pdf

S型速度曲线进阶:基于Sin²(x)的PLC平滑运动控制实践(以伺服/步进系统为例)

本文深入探讨了基于Sin²(x)的S型速度曲线在PLC平滑运动控制中的实践应用,特别针对伺服/步进系统。通过对比传统梯形曲线和七段S曲线,详细展示了Sin²(x)曲线在加速度连续性、计算效率和参数自适应性方面的优势,并结合博图平台的具体实现技巧和实战案例,为精密运动控制提供了优化方案。

weixin_28718793的博客 242

Monocle2拟时轨迹基因模块的GO富集解析

本文详细解析了如何对Monocle2拟时分析中得到的基因表达模块进行GO富集分析。通过从热图对象中提取聚类模块,并利用clusterProfiler等工具进行功能注释,将抽象的基因表达时序模式转化为可解释的生物学功能主题,如免疫应答、细胞外基质组织等,从而深入理解细胞命运转变的驱动机制。

gpt4scribbler的博客 499

Linux中断子系统分析之(四):驱动程序申请中断

中断子系统中有一个重要的设计机制,那就是Top-half和Bottom-half,将紧急的工作放置在Top-half中来处理,而将耗时的工作放置在Bottom-half中来处理。 如果中断不分上下半部处理,那么意味着只有等上一个中断完成处理后才会打开中断,下一个中断才能得到响应。当某个中断处理处理时间较长时,很有可能就会造成其他中断丢失而无法响应,影响系统性能。 中断分成上下半部处理可以提高中断的响应能力,在上半部处理完成后便将中断打开,这样就可以响应其他中断了,等到中断退出的时候再进行下半部的处理。为了进

m0_46525308的博客 1225

Qwen2.5-Omni实战:5分钟搞定多模态AI模型本地部署(含Thinker-Talker架构解析)

本文详细介绍了Qwen2.5-Omni多模态AI模型的本地部署流程,包括硬件配置、环境准备和实战应用开发。特别解析了其创新的Thinker-Talker架构,该架构通过TMRoPE位置编码实现跨模态同步处理,大幅提升多模态任务效率。5分钟即可完成部署,适合开发者快速实现文本、图像和音频的联合处理。

weixin_29085865的博客 171

2025爬虫实战:某音直播间实时弹幕获取原理及源码分析

某音直播弹幕虽然没有直接挂在 DOM 上,但由于用的是西瓜播放器,弹幕是通过 JS 接口动态渲染的,这就给了我们 Hook 的机会。关键点是找到调用的位置,然后拦截并输出对象里的message字段。这个思路其实也适用于其他前端渲染的播放器,比如 B 站的 DPlayer、HLS.js、甚至很多自研播放器都有类似结构。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1810

Oracle EBS PAC定期成本分配处理程序请求报错:30011一个无效帐户与正在处理的物料关联

Oracle EBS版本: RDBMS : 12.1.0.2.0 Oracle Applications : 12.2.6 前提条件: 1、启用“MRP:调试模型”配置文件 月结会计反映执行《定期成本分配处理程序》请求报错: 中文:30011一个无效帐户与正在处理的物料关联。: CSTPALPC.create_dist_entry : 40 英文:30011An invalid account is associated with the item being transacted.:...

陈显平的专栏-Oracle EBS 1085

Cadence OrCAD Capture 软件自带元件原理图符号库目录与介绍图文视频教程

硬件工程师在开始原理图设计时,应该首先拥有自己的元件原理图符号库。基于Capture进行原理图设计的一个很大的优点就是,软件自带的元件库比较全。本文简单介绍Capture软件自带元件库。

fydar的博客 5577

【图像去噪】论文复现:CLIP用于图像去噪提升泛化性!CLIPDenoising的Pytorch源码复现,跑通CLIPDenoising全流程,图文结合,网络结构梳理和拆解,对应源码注释!

论文题目:Transfer CLIP for Generalizable Image Denoising —— 用于可泛化图像去噪的转移CLIP。【图像去噪】论文精读:Transfer CLIP for Generalizable Image Denoising(CLIPDenoising)CLIPDenoising理论部分详解见上面对应的论文精读,本文以源码为主,理论部分只是粗略回顾。启发:多看其他领域的文章,分析是否能应用在去噪领域,这是产生idea的要素之一;

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1412

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: 代码水平低,但是要基于pytorch做深度学习,应该如何学习呢?一文给你讲透彻了
下一篇: 太惊艳了,爆干几天几夜完成的实战模型:【猫狗大战】附资料
跟着萌妹学Java
博客等级 码龄5年 100粉丝 77原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值