OpenCV级联分类器识别车辆实践笔记

这篇具有很好参考价值的文章主要介绍了OpenCV级联分类器识别车辆实践笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. OpenCV 级联分类器的基本原理

基于Haar特征的级联分类器的目标检测是Paul Viola和Michael Jones在2001年的论文中提出的一种有效的目标检测方法。这是一种基于机器学习的方法,从大量的正面和负面图像中训练级联函数。然后用它来检测其他图像中的物体。

Haar特征是一种反映图像的灰度变化的,像素分模块求差值的一种特征。它分为三类:边缘特征、线性特征、中心特征和对角线特征。就像卷积核一样。每个特征都是一个单独的值,由黑色矩形下的像素和减去白色矩形下的像素和得到。用黑白两种矩形框组合成特征模板,在特征模板内用 黑色矩形像素和减去白色矩形像素和来表示这个模版的特征值。
OpenCV级联分类器识别车辆实践笔记,人工智能及Python,opencv,目标跟踪,车辆识别
例如:脸部的一些特征能由矩形模块差值特征简单的描述,如:眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等。但矩形特征只对一些简单的图形结构,如边缘、线段较敏感,所以只能描述在特定方向(水平、垂直、对角)上有明显像素模块梯度变化的图像结构。这样就可以进行区分人脸。

级联分类器(Cascade Classifier)是一种用于目标检测的机器学习模型,通常用于识别静态图像或视频流中的特定对象或物体。级联分类器的一个重要应用是人脸检测。

级联分类器基于强分类器的级联结构,其中每个强分类器都是由多个弱分类器组成的。弱分类器是一种简单而不太准确的分类器,但通过级联结构及其组合,可以达到高效且精确的目标检测效果。

2. 级联分类器CascadeClassifier检测的基本原理:

Haar特征分类器就是一个XML文件,用于存储检测特征,xml中存放的是训练后的特征池,特征size大小根据训练时的参数而定,检测的时候可以简单理解为就是将每个固定size特征(检测窗口)与输入图像的同样大小区域比较,如果匹配那么就记录这个矩形区域的位置,然后滑动窗口,检测图像的另一个区域,重复操作。由于输入的图像中特征大小不定,比如在输入图像中眼睛是50x50的区域,而训练时的是25x25,那么只有当输入图像缩小到一半的时候,才能匹配上,所以这里还有一个逐步缩小图像,也就是制作图像金字塔的流程。

利用Opencv自带的Haar特征分类器进行人脸检测,该文件中会描述人体各个部位的Haar特征值。包括人脸、眼睛、嘴唇等等。Haar特征分类器存放目录:OpenCV安装目录中的\data\ haarcascades目录下。

3. 静态图中车辆识别

from PIL import Image
import cv2
import numpy as np

image = Image.open('V1.png')
w,h = image.size
#image = image.resize((int(w/2),int(h/2)))
image_arr = np.array(image)
image

OpenCV级联分类器识别车辆实践笔记,人工智能及Python,opencv,目标跟踪,车辆识别

grey = cv2.cvtColor(image_arr,cv2.COLOR_BGR2GRAY)
dilated = cv2.dilate(blur,np.ones((3,3)))

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (2, 2))
closing = cv2.morphologyEx(dilated, cv2.MORPH_CLOSE, kernel) 
Image.fromarray(closing)

OpenCV级联分类器识别车辆实践笔记,人工智能及Python,opencv,目标跟踪,车辆识别

car_cascade_src = 'haarcascade_car.xml'
car_cascade = cv2.CascadeClassifier(car_cascade_src)
cars = car_cascade.detectMultiScale(closing, 1.1, 1)
cnt = 0
for (x,y,w,h) in cars:
  cv2.rectangle(image_arr,(x,y),(x+w,y+h),(255,0,0),2)
  cnt += 1
print(cnt, " cars found")
Image.fromarray(image_arr)
21  cars found

OpenCV级联分类器识别车辆实践笔记,人工智能及Python,opencv,目标跟踪,车辆识别

4. 动态视频中车辆识别

import cv2
import numpy as np

car_classifier= cv2.CascadeClassifier('haarcascade_car.xml')
cap= cv2.VideoCapture('cars.avi')

while True:    
    ret, frame= cap.read()
    if ret:
        #frame= cv2.resize(frame, None, fx= 0.5, fy= 0.5, interpolation= cv2.INTER_LINEAR)
        gray= cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        cars= car_classifier.detectMultiScale(gray,1.2,3)

        for (x,y,w,h) in cars:
            cv2.rectangle(frame,(x,y),(x+w,y+h), (0,255,255),2)
            cv2.imshow('Cars', frame)

    else:
        print('warning: video is not load correctly or the video is finished')
        break
        
    key = cv2.waitKey(1)   #每一帧图像就显示一毫秒就可以,然后继续循环
    if key == 27:          #27是esc的ascall码
        break            
            
cap.release()
cv2.destroyAllWindows()

OpenCV级联分类器识别车辆实践笔记,人工智能及Python,opencv,目标跟踪,车辆识别

5. 关键OpenCV函数说明

cv2.CascadeClassifier.detectMultiScale() 函数介绍
在 OpenCV 中,人脸检测使用的是 cv2.CascadeClassifier.detectMultiScale()函数,它可以检
测出图片中所有的人脸。该函数由分类器对象调用,其语法格式为:

objects = cv2.CascadeClassifier.detectMultiScale( image[,
scaleFactor[, minNeighbors[, flags[, minSize[, maxSize]]]]] )

式中各个参数及返回值的含义为:

  • image:待检测图像,通常为灰度图像。
  • scaleFactor:表示在前后两次相继的扫描中,搜索窗口的缩放比例。
  • minNeighbors:表示构成检测目标的相邻矩形的最小个数。默认情况下,该值为 3,意味着有 3 个以上的检测标记存在时,才认为人脸存在。如果希望提高检测的准确率,可以将该值设置得更大,但同时可能会让一些人脸无法被检测到。
  • flags:该参数通常被省略。在使用低版本 OpenCV(OpenCV 1.X 版本)时,它可能会被设置为 CV_HAAR_DO_CANNY_PRUNING,表示使用 Canny 边缘检测器来拒绝一些区域。
  • minSize:目标的最小尺寸,小于这个尺寸的目标将被忽略。
  • maxSize:目标的最大尺寸,大于这个尺寸的目标将被忽略。
  • objects:返回值,目标对象的矩形框向量组。

代码中所涉及到的模型和视频等资源,详见OpenCV级联分类器识别车辆实践笔记中所涉及到的资源。

参考:

小海聊智造. opencv 进阶10-人脸识别原理说明及示例-cv2.CascadeClassifier.detectMultiScale(). CSDN博客. 2023.08
Stray_Lambs. 浅析cv2.CascadeClassifier()函数. CSDN博客. 2019.09
HAMED ETEZADI ·Haar cascade classifier-Car Detection. Kaggle. 2022.04
How to Detect Cars in a Video in Python using OpenCV. Learning about Electronics文章来源地址https://www.toymoban.com/news/detail-735736.html

到了这里,关于OpenCV级联分类器识别车辆实践笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenCV的级联分类器训练

    使用增强级联的弱分类器包括两个主要阶段:训练和检测阶段。对象检测教程中有描述使用基于 HAAR 或 LBP 模型的检测阶段。这里主要介绍训练增强分类器级联所需的功能,包括:准备训练数据、执行实际模型训练、可视化训练。 目录 一、训练数据准备 1、负样本 2、正样本

    2024年02月13日
    浏览(28)
  • ROS OpenCV 级联分类器

    Haar级联分类器 、 HOG级联分类器 和 LBP级联分类器 都是计算机视觉中用于 目标检测的特征提取与分类 方法,它们各自利用不同的图像特征进行训练,并且通常结合级联结构来提升实时性。 1. 特征描述: Haar特征由Paul Viola和Michael Jones在2001年提出, 主要用于人脸检测 。它是一

    2024年02月01日
    浏览(31)
  • 简易机器学习笔记(十一)opencv 简易使用-人脸识别、分类任务

    前段时间摸了下机器学习,然后我发现其实openCV还是一个很浩瀚的库的,现在也正在写一篇有关yolo的博客,不过感觉理论偏多,所以在学yolo之前先摸一下opencv,简单先写个项目感受感受opencv。 openCV实际上已经有一个比较完整的模型了,下载在haarcascades 这里我们下haarcascade

    2024年01月21日
    浏览(32)
  • 使用opencv实现人脸检测:Haar级联分类器

    人脸检测的目标是确定图像或视频中是否存在人脸。如果存在多个面,则每个面都被一个边界框包围,因此我们知道这些面的位置。 人脸检测算法的主要目标是准确有效地确定图像或视频中人脸的存在和位置。这些算法分析数据的视觉内容,搜索与面部特征相对应的模式和特

    2024年04月29日
    浏览(27)
  • 【OpenCV】 车辆识别 运动目标检测

    目录 一:车辆识别 运动目标检测 二:车辆识别实现 超详细步骤解析 步骤一:灰度化处理 步骤二:帧差处理 步骤三:二值化处理 步骤四:图像降噪 4-1 腐蚀处理 目的 去除白色噪点 4-2 膨胀处理 目的 把白色区域变大 步骤五:提取关键点 框选运动目标检测 三:车辆识别 完

    2024年02月04日
    浏览(37)
  • 【youcans 的 OpenCV 学习课】22. Haar 级联分类器

    专栏地址:『youcans 的图像处理学习课』 文章目录:『youcans 的图像处理学习课 - 总目录』 Haar 特征分类器是基于 Haar-like 特征提取的监督学习分类器。我们首先讨论 Haar 特征及其加速计算。 3.1 Haar 特征 Haar 特征用黑白两种矩形框组合成特征模板,在特征模板内用黑色矩形像

    2023年04月26日
    浏览(25)
  • AI人工智能课题:车辆分析车型识别系统的设计与实现(基于百度智能云AI接口)

     博主介绍 :黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、

    2024年02月03日
    浏览(39)
  • 【OpenCV】“帧差法”实现移动物体的检测(车辆识别)

    目录 一、帧差法 1、概念 2、为什么帧差法可以检测运动的物体?  二、使用OpenCV配合帧差法实现车辆识别 1、加载视频 2、灰度处理+帧差计算 3、二值化 4、腐蚀 5、膨胀 6、框选出车辆 三、全部代码+实现效果 1、代码 2、车辆检测效果 四、帧差法存在不足之处         帧差

    2024年02月02日
    浏览(31)
  • 基于Java(SpringBoot框架)毕业设计作品成品(32)AI人工智能毕设AI车辆大全车牌识别系统设计与实现

    博主介绍: 《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月08日
    浏览(44)
  • 竞赛选题 深度学习YOLOv5车辆颜色识别检测 - python opencv

    🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习YOLOv5车辆颜色识别检测 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:4分 🧿 更多资料, 项目分享: https://gitee.com

    2024年02月07日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包