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

OpenCV检测嘴巴

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

软硬兼环境

  • windows 10 64bit
  • nivdia gtx 1066
  • opencv 4.4.0

视频看这里

此处是 youtube 的播放链接,需要科学上网。喜欢我的视频,请记得订阅我的频道,打开旁边的小铃铛,点赞并分享,感谢您的支持。

示例代码

  1. import cv2
  2. # 加载
  3. mouth_cascade = cv2.CascadeClassifier('haarcascade_mcs_mouth.xml')
  4. if mouth_cascade.empty():
  5. raise IOError('Unable to load the mouth cascade classifier xml file')
  6. # 读取本地摄像头,这里的参数可以传递
  7. # 1. url,如"rtsp://"
  8. # 2. 本地文件,如"test.mp4"
  9. cap = cv2.VideoCapture(0)
  10. # 进入循环
  11. while True:
  12. # 读取一帧的视频数据,数据存储在frame中
  13. ret, frame = cap.read()
  14. if not ret:
  15. print('read frame failed.')
  16. break
  17. # 灰度化
  18. gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
  19. mouth_rects = mouth_cascade.detectMultiScale(gray, 1.7, 3)
  20. for (x, y, w, h) in mouth_rects:
  21. y = int(y - 0.15 * h)
  22. # 在目标上画框
  23. cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 3)
  24. break
  25. # 显示图像
  26. cv2.imshow('Mouth Detection', frame)
  27. c = cv2.waitKey(1)
  28. if c == 27:
  29. break
  30. # 清理数据
  31. cap.release()
  32. cv2.destroyAllWindows()

其中最重要的方法 detectMultiScale

  1. 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)

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