欢迎访问我的网站,希望内容对您有用,感兴趣的可以加入免费知识星球。

OpenCV检测嘴巴

OpenCV 迷途小书童 3年前 (2020-11-14) 2707次浏览 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)

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

Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

请关闭 Adblock 等类似浏览器插件,然后刷新页面访问,感谢您的支持!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.