广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python中怎么实现人体肤色检测功能
  • 490
分享到

Python中怎么实现人体肤色检测功能

2023-06-16 07:06:34 490人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

这期内容当中小编将会给大家带来有关python中怎么实现人体肤色检测功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。安装 Python-OpenCV 库pip install ope

这期内容当中小编将会给大家带来有关python中怎么实现人体肤色检测功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

安装 Python-OpenCV

pip install opencv-python -i https://mirrors.ustc.edu.cn/pypi/WEB/simple

利用 -i 为pip指令镜像源, 这里使用电子科技大学的源, 速度比官方源更快.

安装 Numpy 科学计算库

pip install numpy -i Https://mirrors.ustc.edu.cn/pypi/web/simple

图像的基本操作

import numpy as np  import cv2  imname =  "6358772.jpg"  # 读入图像  '''  使用函数 cv2.imread() 读入图像。这幅图像应该在此程序的工作路径,或者给函数提供完整路径.  警告:就算图像的路径是错的,OpenCV 也不会提醒你的,但是当你使用命令print(img)时得到的结果是None。  '''  img = cv2.imread(imname, cv2.IMREAD_COLOR)  '''  imread函数的第一个参数是要打开的图像的名称(带路径)  第二个参数是告诉函数应该如何读取这幅图片. 其中      cv2.IMREAD_COLOR 表示读入一副彩色图像, alpha 通道被忽略, 默认值      cv2.IMREAD_ANYCOLOR 表示读入一副彩色图像      cv2.IMREAD_GRAYSCALE 表示读入一副灰度图像      cv2.IMREAD_UNCHANGED 表示读入一幅图像,并且包括图像的 alpha 通道  '''  # 显示图像  '''  使用函数 cv2.imshow() 显示图像。窗口会自动调整为图像大小。第一个参数是窗口的名字,  其次才是我们的图像。你可以创建多个窗口,只要你喜欢,但是必须给他们不同的名字.  '''  cv2.imshow("image", img) # "image" 参数为图像显示窗口的标题, img是待显示的图像数据  cv2.waiTKEy(0) #等待键盘输入,参数表示等待时间,单位毫秒.0表示无限期等待  cv2.destroyAllwindows() # 销毁所有cv创建的窗口  # 也可以销毁指定窗口:  #cv2.destroyWindow("image") # 删除窗口标题为"image"的窗口  # 保存图像  '''  使用函数 cv2.imwrite() 来保存一个图像。首先需要一个文件名,之后才是你要保存的图像。  保存的图片的格式由后缀名决定.  '''  #cv2.imwrite(imname + "01.png", img)   cv2.imwrite(imname + "01.jpg", img)

皮肤检测算法

基于YCrCb颜色空间的Cr分量+Otsu法阈值分割算法

YCrCb 即 YUV ,其中 Y 表示明亮度 Luminance 或 Luma , 也就是灰阶值. 而 U 和 V 表示的则是色度 Chrominance 或 Chroma ,作用是描述影像色彩及饱和度, 用于指定像素的颜色. 亮度 是透过RGB输入信号来建立的, 方法是将RGB信号的特定部分叠加到一起. 色度 则定义了颜色的两个方面─色调与饱和度,分别用 Cr 和 Cb 来表示. 其中, Cr 反映了RGB输入信号红色部分与RGB信号亮度值之间的差异. 而 Cb 反映的是RGB输入信号蓝色部分与RGB信号亮度值之间的差异.

该方法的原理也很简单:

  •  将RGB图像转换到 YCrCb 颜色空间,提取 Cr 分量图像

  •  对 Cr 分量进行高斯滤波

  •  对Cr做自二值化阈值分割处理 OSTU 法

关于高斯滤波

使用低通滤波器可以达到图像模糊的目的。这对与去除噪音很有帮助。其实就是去除图像中的高频成分(比如:噪音,边界)。所以边界也会被模糊一点。(当然,也有一些模糊技术不会模糊掉边界)。OpenCV 提供了四种模糊技术。高斯滤波就是其中一种。实现的函数是 cv2.GaussianBlur()。我们需要指定高斯滤波器的宽和高(必须是奇数)。以及高斯函数沿 X,Y 方向的标准差。如果我们只指定了 X 方向的的标准差,Y 方向也会取相同值。如果两个标准差都是 0,那么函数会根据核函数的大小自己计算。高斯滤波可以有效的从图像中去除高斯噪音。如果你愿意的话,你也可以使用函数 cv2.getGaussianKernel() 自己构建一个高斯滤波器。

# 肤色检测之一: YCrCb之Cr分量 + OTSU二值化  img = cv2.imread(imname, cv2.IMREAD_COLOR)  ycrcb = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb) # 把图像转换到YUV色域  (y, cr, cb) = cv2.split(ycrcb) # 图像分割, 分别获取y, cr, br通道图像  # 高斯滤波, cr 是待滤波的源图像数据, (5,5)是值窗口大小, 0 是指根据窗口大小来计算高斯函数标准差  cr1 = cv2.GaussianBlur(cr, (5, 5), 0) # 对cr通道分量进行高斯滤波  # 根据OTSU算法求图像阈值, 对图像进行二值化  _, skin1 = cv2.threshold(cr1, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)   cv2.imshow("image CR", cr1)  cv2.imshow("Skin Cr+OSTU", skin1 )

基于YCrCb颜色空间Cr, Cb范围筛选法

这个方法跟法一其实大同小异,只是颜色空间不同而已。据资料显示,正常黄种人的Cr分量大约在140至175之间,Cb分量大约在100至120之间。大家可以根据自己项目需求放大或缩小这两个分量的范围,会有不同的效果。

# 肤色检测之二: YCrCb中 140<=Cr<=175 100<=Cb<=120  img = cv2.imread(imname, cv2.IMREAD_COLOR) ycrcb = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb) # 把图像转换到YUV色域  (y, cr, cb) = cv2.split(ycrcb) # 图像分割, 分别获取y, cr, br通道分量图像  skin2 = np.zeros(cr.shape, dtype=np.uint8) # 根据源图像的大小创建一个全0的矩阵,用于保存图像数据  (x, y) = cr.shape # 获取源图像数据的长和宽  # 遍历图像, 判断Cr和Br通道的数值, 如果在指定范围中, 则置把新图像的点设为255,否则设为0  for i in  range(0, x):   for j in  range(0, y):  if (cr[i][j] >  140) and (cr[i][j] <  175) and (cb[i][j] >  100) and (cb[i][j] <  120):              skin2[i][j] =  255  else:              skin2[i][j] =  0  cv2.imshow(imname, img)  cv2.imshow(imname +  " Skin2 Cr+Cb", skin2)

检测效果

基于HSV颜色空间H,S,V范围筛选法

这个方法跟上一方法类似,只是颜色空间不同而已。据资料显示,正常黄种人的H分量大约在7至20之间,S分量大约在28至256之间,V分量大约在50至256之间。大家可以根据自己项目需求放大或缩小这两个分量的范围,会有不同的效果。

# 肤色检测之三: HSV中 7<H<20 28<S<256 50<V<256  img = cv2.imread(imname, cv2.IMREAD_COLOR)   hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # 把图像转换到HSV色域  (_h, _s, _v) = cv2.split(hsv) # 图像分割, 分别获取h, s, v 通道分量图像  skin3 = np.zeros(_h.shape, dtype=np.uint8)  # 根据源图像的大小创建一个全0的矩阵,用于保存图像数据  (x, y) = _h.shape # 获取源图像数据的长和宽  # 遍历图像, 判断HSV通道的数值, 如果在指定范围中, 则置把新图像的点设为255,否则设为0  for i in  range(0, x):  for j in  range(0, y):  if (_h[i][j] >  7) and (_h[i][j] <  20) and (_s[i][j] >  28) and (_s[i][j] <  255) and (_v[i][j] >  50) and (_v[i][j] <  255):              skin3[i][j] =  255  else:              skin3[i][j] =  0  cv2.imshow(imname, img)  cv2.imshow(imname +  " Skin3 HSV", skin3)

上述就是小编为大家分享的Python中怎么实现人体肤色检测功能了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网Python频道。

--结束END--

本文标题: Python中怎么实现人体肤色检测功能

本文链接: https://www.lsjlt.com/news/282649.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python中怎么实现人体肤色检测功能
    这期内容当中小编将会给大家带来有关Python中怎么实现人体肤色检测功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。安装 Python-OpenCV 库pip install ope...
    99+
    2023-06-16
  • 怎么用Python+MediaPipe实现检测人脸功能
    这篇文章主要介绍“怎么用Python+MediaPipe实现检测人脸功能”,在日常操作中,相信很多人在怎么用Python+MediaPipe实现检测人脸功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用...
    99+
    2023-06-29
  • JavaScript中怎么实现人脸检测功能
    今天就跟大家聊聊有关JavaScript中怎么实现人脸检测功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。文件夹结构Project Fo...
    99+
    2022-10-19
  • Python实现笑脸检测+人脸口罩检测功能
    目录一、人脸图像特征提取方法二、对笑脸数据集genki4k进行训练和测试(包括SVM、CNN),输出模型训练精度和测试精度(F1-score和ROC),实现检测图片笑脸和实时视频笑脸...
    99+
    2022-11-12
  • Python+MediaPipe实现检测人脸功能详解
    目录MediaPipe概述人脸检测MediaPipe概述 谷歌开源MediaPipe于2019年6月首次推出。它的目标是通过提供一些集成的计算机视觉和机器学习功能,使我们的生活变得轻...
    99+
    2022-11-13
  • Python中怎么实现人脸检测
    Python中怎么实现人脸检测,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。首先需要安装这些包,以Ubuntu为例:$ sudo apt-g...
    99+
    2023-06-17
  • 基于Flask和PaddleHub怎么实现人脸检测功能
    这篇文章主要介绍“基于Flask和PaddleHub怎么实现人脸检测功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“基于Flask和PaddleHub怎么实现人脸检测功能”文章能帮助大家解决问题。...
    99+
    2023-07-05
  • 基于Python实现人脸识别和焦点人物检测功能
    写在前面的话 基于dlib库的模型,实现人脸识别和焦点人物的检测。最后呈现的效果为焦点人物的识别框颜色与其他人物框不一样。 准备工作 需要安装好python环境,安装好dlib、o...
    99+
    2022-11-12
  • 如何在python中使用opencv实现一个颜色检测功能
    本文章向大家介绍如何在python中使用opencv实现一个颜色检测功能的基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;3、网络...
    99+
    2023-06-06
  • Python怎么实现人脸识别微笑检测
    这篇文章主要介绍“Python怎么实现人脸识别微笑检测”,在日常操作中,相信很多人在Python怎么实现人脸识别微笑检测问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python怎么实现人脸识别微笑检测”的疑...
    99+
    2023-06-21
  • Python基于HOG+SVM/RF/DT等模型怎么实现目标人行检测功能
    本篇内容主要讲解“Python基于HOG+SVM/RF/DT等模型怎么实现目标人行检测功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python基于HOG+SVM/RF/DT等模型怎么实现目...
    99+
    2023-06-30
  • vue中怎么实现一个换肤功能
    这篇文章给大家介绍vue中怎么实现一个换肤功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1 色值的选取和原则推荐大家看下蚂蚁金服的设计指引,里面对常见的交互和界面设计有一套不错的指...
    99+
    2022-10-19
  • Android中怎么实现动态人脸检测
    Android中怎么实现动态人脸检测,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。第一步我们首先来定义一个surfaceview 盖在我们Carmen使用的surfacev...
    99+
    2023-05-30
    android
  • AjaxPro中怎么实现无刷新数据检测功能
    本篇文章给大家分享的是有关AjaxPro中怎么实现无刷新数据检测功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。使用AjaxPro实现无刷新数据检测Ajax(Asynchro...
    99+
    2023-06-17
  • Python基于HOG+SVM/RF/DT等模型实现目标人行检测功能
    当下基本所有的目标检测类的任务都会选择基于深度学习的方式,诸如:YOLO、SSD、RCNN等等,这一领域不乏有很多出色的模型,而且还在持续地推陈出新,模型的迭代速度很快,其实最早实现...
    99+
    2022-11-11
  • python疲劳驾驶困倦低头检测功能怎么实现
    本篇内容主要讲解“python疲劳驾驶困倦低头检测功能怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python疲劳驾驶困倦低头检测功能怎么实现”吧!python疲劳驾驶困倦低头检测,代...
    99+
    2023-06-29
  • 怎么在python中利用opencv实现一个车道线检测功能
    这篇文章将为大家详细讲解有关怎么在python中利用opencv实现一个车道线检测功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。实现思路:canny边缘检测获取图中的边缘信息;2、霍夫变...
    99+
    2023-06-06
  • Python中怎么实现异常检测
    Python中怎么实现异常检测,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。公式和过程与我之前解释过的其他机器学习算法相比,这要简单得多。该算法将使用均值和方差来计算每个训...
    99+
    2023-06-16
  • 使用python与opencv怎么实现一个运动检测器功能
    使用python与opencv怎么实现一个运动检测器功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Python主要用来做什么Python主要应用于:1、We...
    99+
    2023-06-06
  • 怎么在Android 应用中实现一个换肤功能
    今天就跟大家聊聊有关怎么在Android 应用中实现一个换肤功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Android换肤技术总结背景纵观现在各种Android app,其换肤...
    99+
    2023-05-31
    android roi
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作