软硬兼环境
- windows 10 64bit
- nivdia gtx 1066
- opencv 4.4.0
视频看这里
此处是 youtube
的播放链接,需要科学上网。喜欢我的视频,请记得订阅我的频道,打开旁边的小铃铛,点赞并分享,感谢您的支持。
示例代码
import cv2
# 加载
mouth_cascade = cv2.CascadeClassifier('haarcascade_mcs_mouth.xml')
if mouth_cascade.empty():
raise IOError('Unable to load the mouth cascade classifier xml file')
# 读取本地摄像头,这里的参数可以传递
# 1. url,如"rtsp://"
# 2. 本地文件,如"test.mp4"
cap = cv2.VideoCapture(0)
# 进入循环
while True:
# 读取一帧的视频数据,数据存储在frame中
ret, frame = cap.read()
if not ret:
print('read frame failed.')
break
# 灰度化
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
mouth_rects = mouth_cascade.detectMultiScale(gray, 1.7, 3)
for (x, y, w, h) in mouth_rects:
y = int(y - 0.15 * h)
# 在目标上画框
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 3)
break
# 显示图像
cv2.imshow('Mouth Detection', frame)
c = cv2.waitKey(1)
if c == 27:
break
# 清理数据
cap.release()
cv2.destroyAllWindows()
其中最重要的方法 detectMultiScale
objects = cv.CascadeClassifier.detectMultiScale( image[, scaleFactor[, minNeighbors[, flags[, minSize[, maxSize]]]]] )
对应参数的含义如下
- image 待检测的图像
- scaleFactor 每次图像尺寸减小的比例
- minNeighbors 最小近邻数,小于这数,目标就会被忽略
- flags 与方法cvHaarDetectObjects中的意义一样,在新的分类器中已经不使用了
- minSize 目标的最小尺寸,低于这个尺寸就会被忽略
- maxSize 目标的最大尺寸,大于这个尺寸就会被忽略
- objects 检测到的目标序列
在实际使用中,可以对其中的参数进行微调以达到最优效果。
执行上述代码,可以得到
分类器下载地址
百度网盘链接:https://pan.baidu.com/s/1lmY726LVn8apPQpoY76pyA
提取码:jqeb