太原营销型网站建设制作,iss服务器网站建设,河北省建设厅网站运行条件,企业建立网站需要1. OpenCV 级联分类器的基本原理
基于Haar特征的级联分类器的目标检测是Paul Viola和Michael Jones在2001年的论文中提出的一种有效的目标检测方法。这是一种基于机器学习的方法#xff0c;从大量的正面和负面图像中训练级联函数。然后用它来检测其他图像中的物体。
Haar特征…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)
imagegrey 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),(xw,yh),(255,0,0),2)cnt 1
print(cnt, cars found)
Image.fromarray(image_arr)21 cars found4. 动态视频中车辆识别
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),(xw,yh), (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该参数通常被省略。在使用低版本 OpenCVOpenCV 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