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

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

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

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

级联分类器(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 npimage = Image.open('V1.png')
w,h = image.size
#image = image.resize((int(w/2),int(h/2)))
image_arr = np.array(image)
image

在这里插入图片描述

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)

在这里插入图片描述

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

在这里插入图片描述

4. 动态视频中车辆识别

import cv2
import numpy as npcar_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')breakkey = cv2.waitKey(1)   #每一帧图像就显示一毫秒就可以,然后继续循环if key == 27:          #27是esc的ascall码break            cap.release()
cv2.destroyAllWindows()

在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/132432.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

查看和分析 IIS 日志文件以增强 Web 服务器安全性

Microsoft IIS服务器,无论是Web还是FTP,对于企业来说都是必不可少的。但是,IT 安全管理员的工作并不止于部署 IIS 服务器。部署后,管理员必须采取安全措施来保护这些服务器,监控 IIS 服务器安全性的一种行之有效的方法…

Linux 环境变量

一、环境变量 概念:环境变量是系统预设值的参数。Linux 是一个多用户的操作系统,所以每一个用户也都有自己的环境变量。常用变量 PATH 决定了要去哪个路径下去寻找我们的程序或者命令   echo 命令   功能:在标准输出上显示一段文字   e…

浅述TSINGSEE视频技术与视频智能分析能力在城市治理中的典型应用场景

TSINGSEE青犀视频以“视频汇聚视频智能分析”为支撑,面向各委办局提供城市市域治理场景、城市基层治理场景的视频数字化、智能化、智慧化应用,推进城市治理体系和治理能力现代化。 安防视频汇聚系统EasyCVR视频综合管理平台支持接入与整合已建的社会视频…

IIS解析漏洞

环境搭建 参考&#xff1a;奇安信攻防社区-IIS渗透合集 常见的解析漏洞&#xff1a; IIS 5.x/6.0解析漏洞 IIS 7.0/IIS 7.5/ Nginx <0.8.3畸形解析漏洞 Nginx <8.03 空字节代码执行漏洞 Apache解析漏洞 IIS6.X文件解析漏洞 原理&#xff1a; IIS文件解析漏洞&#xf…

展会预告丨中国海洋装备博览会盛大开幕!箱讯科技亮相1T18展位

2023年10月12日-15日 中国海洋装备博览会暨2023世界航海装备大会 即将在福州海峡国际会展中心盛大开幕 箱讯科技携手上海虹口区工商联航运商会 亮相本次博览会 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 关于“中国海洋装备博览会” 中国海洋装…

修正两个shapefile之间的数字化错误

目录 一、数据输入 二、测量拓扑容差 三、启用编辑 四、使用拓扑编辑工具 五、建立图层拓扑关系 六、待修改的图层设置为唯一可选图层 七、编辑折点 八、拖动折点至land图层折点 一、数据输入 二、测量拓扑容差 拓扑容差约为4~5m 三、启用编辑 四、使用拓扑编辑工具 五…

香港云服务器使用的小误区

​  当前&#xff0c;在海外市场的发展下&#xff0c;香港云服务器被推的火热。一方面&#xff0c;您可以根据需要积极利用它的免备案和国际线路等特性&#xff0c;另一方面&#xff0c;也可以借助它&#xff0c;使用尽可能多或尽可能少的存储空间&#xff0c;您的业务也可以…

【数据库】Sql Server数据迁移,处理自增字段赋值

给自己一个目标&#xff0c;然后坚持一段时间&#xff0c;总会有收获和感悟&#xff01; 在实际项目开发中&#xff0c;如果遇到高版本导入到低版本&#xff0c;或者低版本转高版本&#xff0c;那么就会出现版本不兼容无法导入&#xff0c;此时通过程序遍历创建表和添加数据方式…

区块链跨链技术

区块链跨链技术 背景 近年来&#xff0c;随着区块链技术的不断发展&#xff0c;区块链的应用场景逐渐从最初的加密货币领域扩展到金融、物流、医疗、公共服务等各个领域。随着区块链的应用场景不断增多&#xff0c;区块链的“数据孤岛”问题日益突出&#xff0c;不同场景下的…

成集云 | 嗨便利集成金蝶云星辰 | 解决方案

方案介绍 嗨便利是一款便捷即时到家服务平台。它集合了即时零售、即时配送、前置仓、数字化中台、会员体系以及自研SAAS系统等众多前沿科技&#xff0c;利用大数据驱动的预测算法&#xff0c;通过多渠道订单整合&#xff0c;智能调度配送系统&#xff0c;致力于为消费者提供“…

nio 文件传输

transferto方法一次只能传输2个g的数据 文件大于2个g时

PPO算法逐行代码详解

前言&#xff1a;本文会从理论部分、代码部分、实践部分三方面进行PPO算法的介绍。其中理论部分会介绍PPO算法的推导流程&#xff0c;代码部分会给出PPO算法的各部分的代码以及简略介绍&#xff0c;实践部分则会通过debug代码调试的方式从头到尾的带大家看清楚应用PPO算法在car…