欢迎访问我的网站,希望内容对您有用,感兴趣的可以加入我们的社群。

OpenCV检测嘴巴

OpenCV 迷途小书童 4年前 (2020-11-14) 3579次浏览 0个评论

软硬兼环境

  • 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 检测到的目标序列

在实际使用中,可以对其中的参数进行微调以达到最优效果。

执行上述代码,可以得到

opencv_mouth_detection

分类器下载地址

百度网盘链接:https://pan.baidu.com/s/1lmY726LVn8apPQpoY76pyA
提取码:jqeb

参考资料

喜欢 (0)

您必须 登录 才能发表评论!