当前位置: 首页 > news >正文

python人脸检测过滤_改进基于人脸检测的肤色过滤器(Python OpenCV)

我正在使用Python OpenCV实现一个自适应肤色过滤器,它使用haarcascades来检测一个直立的脸,然后过滤面部ROI以去除眉毛、眼镜等非皮肤特征,以获得平均肤色(以RGB为单位)。然后我将图像转换为HSV并提取接近我获得的平均值的HSV值。这是我的代码:import cv2

import numpy as np

from functions import *

def nothing(x):

pass

cap = cv2.VideoCapture(0)

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')

cv2.namedWindow('Video')

cv2.moveWindow('Video',5,5)

cv2.namedWindow('HSV_Thresh')

cv2.moveWindow('HSV_Thresh',655,5)

cv2.createTrackbar('tval', 'Video', 29, 255, nothing)

cv2.createTrackbar('htoler', 'HSV_Thresh', 17, 100, nothing)

cv2.createTrackbar('stoler', 'HSV_Thresh', 25, 100, nothing)

cv2.createTrackbar('vtoler', 'HSV_Thresh', 84, 100, nothing)

kernel = np.ones((5, 5), np.uint8)# 5X5 erosion kernel

bavg=0

ravg=0

gavg=0

while True:

tval1=cv2.getTrackbarPos('tval', 'Video')#thresh value to remove non skin components from face

htoler_val=cv2.getTrackbarPos('htoler', 'HSV_Thresh')

stoler_val=cv2.getTrackbarPos('stoler', 'HSV_Thresh')

vtoler_val=cv2.getTrackbarPos('vtoler', 'HSV_Thresh')

ret,img=cap.read()#Read from source

img[0:100,0:100] = [255,255,255]

thresh_hsv_toler=img

faces = face_cascade.detectMultiScale(img, 1.3, 5)

for (x,y,w,h) in faces:

bavg=0

ravg=0

gavg=0

numpix=0

cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)

cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)

roi_face = img[y:y+h, x:x+w]

#avg_col=img[100,100]

rect_face=img[y:y+h-h/8,x+w/7:x+w-w/5]#extract only skin features from remaining bg

mask=cv2.inRange(rect_face,(tval1,tval1,tval1),(255,255,255))

mask=cv2.cvtColor(mask,cv2.COLOR_GRAY2BGR)

tone=cv2.subtract(mask,rect_face)

tone=cv2.subtract(mask,tone)

(rows,cols,col)=tone.shape # 480 rows and 640 cols; 3 values for RGB img

for i in range(rows): #note the presence of colon

for j in range(cols):

if (tone[i,j,0]!=0 and tone[i,j,0]!=0 and tone[i,j,0]!=0):

bavg=bavg+tone[i,j,0]

gavg=gavg+tone[i,j,1]

ravg=ravg+tone[i,j,2]

numpix=numpix+1

bavg=bavg/numpix

gavg=gavg/numpix

ravg=ravg/numpix

'''print "bavg="+str(bavg)

print "gavg="+str(gavg)

print "ravg="+str(ravg)

print "numpix="+str(numpix)'''

cv2.circle(img, (50,50), 20, (bavg,gavg,ravg), 50)#get obtained average colour on screen

cv2.imshow('skin_mask', tone)

hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

thresh_hsv_toler=cv2.inRange(hsv,(hsv[50,50,0]-htoler_val,hsv[50,50,1]-stoler_val,hsv[50,50,2]-vtoler_val),(hsv[50,50,0]+htoler_val,hsv[50,50,1]+stoler_val,hsv[50,50,2]+vtoler_val))

thresh_hsv_toler=cv2.dilate(thresh_hsv_toler, kernel, iterations=1)

thresh_hsv_toler=cv2.cvtColor(thresh_hsv_toler,cv2.COLOR_GRAY2BGR)#superimposing binary mask on image

hsv_filter=cv2.subtract(thresh_hsv_toler,img)

hsv_filter=cv2.subtract(thresh_hsv_toler,hsv_filter)

cv2.imshow('HSV_Thresh', hsv_filter)

if(cv2.waitKey(10) & 0xFF == ord('b')):

break

cv2.imshow('Video', img)

输出如下:

e4021cd08826434e2933241d52a29ea9.png

如何在不添加第二个过滤器的情况下减少结果中的噪声?谢谢

相关文章:

  • rem适配的浏览器_移动端适配rem+vw方案
  • java弹出对话框_Java在Swing中如何实现弹出一个对话框的效果?
  • java adb命令_从Java程序执行ADB命令
  • java switch scanner_if语句switchScanner
  • java 高级选择题_Java高级面试题小结
  • jdbctemplate mysql 分页查询 返回list对象_Spring之jdbcTemplate:查询的三种方式(单个值、单个对象、对象集合)...
  • mysql数据库备份 dump_mysqldump备份和恢复MySQL数据库
  • java servlet 3.0_Java Servlet和Servlet 3.0的新特性
  • java 回溯_正则表达式知识详解之回溯引用 (java版示例)
  • java后台线程_67.Java后台线程
  • java 远程 shell脚本_Java 远程调用 shell脚本
  • python自动化数据驱动_Selenium2+python自动化之数据驱动(ddt)
  • java圆和椭圆的关系_圆与椭圆 - brifuture - 博客园
  • java attributelist_java集合类(二)List学习
  • java ccf认证解答_CCF认证考试(java)---窗口
  • 【译】JS基础算法脚本:字符串结尾
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • egg(89)--egg之redis的发布和订阅
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • js操作时间(持续更新)
  • js继承的实现方法
  • mysql 数据库四种事务隔离级别
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • SpiderData 2019年2月23日 DApp数据排行榜
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 大型网站性能监测、分析与优化常见问题QA
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 前端代码风格自动化系列(二)之Commitlint
  • 驱动程序原理
  • 使用putty远程连接linux
  • 新书推荐|Windows黑客编程技术详解
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • MyCAT水平分库
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ​TypeScript都不会用,也敢说会前端?
  • ​第20课 在Android Native开发中加入新的C++类
  • # 达梦数据库知识点
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (南京观海微电子)——COF介绍
  • (算法)求1到1亿间的质数或素数
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET HttpWebRequest、WebClient、HttpClient
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .net实现客户区延伸至至非客户区
  • /proc/interrupts 和 /proc/stat 查看中断的情况
  • :“Failed to access IIS metabase”解决方法
  • @JsonFormat与@DateTimeFormat注解的使用
  • [ 常用工具篇 ] POC-bomber 漏洞检测工具安装及使用详解