皮肤检测与抠图

皮肤检测的方法很多,这里写的是最简单的方法,感兴趣的同学可以自己加上椭圆检测,膨胀腐蚀等,使得检测与抠图更加精确。github上许多人脸识别的算法,可以多学习那些。

HSV颜色空间

hsv涉及心理学的颜色知识,比rgb检测具有更好的分类效果

python 代码

def get_skin_hsv(img)hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)back = np.zeros(img.shape, np.uint8)(h, s, v) = cv2.split(hsv_img)(x, y) = h.shapefor i in range(x):for j in range(y):if (h0[i][j] > 0) and (h0[i][j] < 20) and (s0[i][j] > 48) and (s0[i][j] < 255) and (v0[i][j] > 50) and (v0[i][j] < 255):back[i][j] = img[i][j]return back

效果

本来放图了,后来想想放别人的图都不合适,感兴趣的大佬自己去试吧。

YUV

yuv色彩空间是考虑人眼对亮谙更敏感的特性,在数据存储,传输时的省去部分信息存储的方法。用于皮肤检测效果也挺好。https://www.cnblogs.com/ALittleDust/p/5935983.html这篇博文对yuv的讲解很详细,感兴趣的同学可以去看。

python代码

def get_skin_yuv(img)ycrcb_img = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb)(y, cr, cb) = cv2.split(ycrcb_img)(x, y) = cr.shapeback = np.zeros(img.shape, np.uint8)for i in range(x):for j in range(y):if (cr[i][j] > 133) and (cr[i][j] < 173) and (cb[i][j] > 77) and (cb[i][j] < 127):back[i][j]=img[i][j]img[i][j]=0      #这样做是为了让原图与滤波后的图合成时更准确return back

效果

感兴趣的大佬自己试吧。

磨皮美颜

磨皮美艳的关键是用什么函数进行滤波,以及参数的设置。如果美图秀秀或者PS开源的话,我想开源社区能把美艳修图发挥到极致。
参考网上大佬的做法,我也选择双边滤波和高斯滤波。
考虑到参数太难调试的问题,我设置了一个滑动条,方便手动调节参数。代码中仅提供了双边滤波的参数设置条,对高斯滤波的参数设置,原理一样。

python滑动条

"""
a,b,c分别接受滑动条位置信息,作为双边滤波的参数d,sigmaColor,sigmaSpace
"""
def noting(x):pass
cv2.namedWindow('image')
cv2.createTrackbar('d','image',0,50,noting)
cv2.createTrackbar('sigmaColor', 'image', 0, 255,noting)
cv2.createTrackbar('sigmaSpace', 'image', 0, 255,noting)
a = cv2.getTrackbarPos('d', 'image')
b = cv2.getTrackbarPos('sigmaColor', 'image')
c = cv2.getTrackbarPos('sigmaSpace', 'image')

双边滤波和高斯滤波

"""
对我们的皮肤抠图back0单独滤波,这样可以保证背景不在转换过程中失真。最后要与原图合起来
"""
img0 = np.zeros(img.shape, np.uint8)
infmg_1 = np.zeros(img.shape, np.uint8)
infmg_2 = np.zeros(img.shape, np.uint8)
infmg_3 = np.zeros(img.shape, np.uint8)
infmg_4 = np.zeros(img.shape, np.uint8)
while (1):key = cv2.waitKey(1)if key > 0:breaka2 = cv2.getTrackbarPos('d', 'image')b2 = cv2.getTrackbarPos('sigmaColor', 'image')c2 = cv2.getTrackbarPos('sigmaSpace', 'image')if a2!=a or b2!=b or c2!=c:cv2.bilateralFilter(back0, a, b, c, infmg_1)a,b,c=a2,b2,c2dst1 = infmg_1 - back0 + 128# cv2.imshow("双边滤波", dst1)infmg_2 = cv2.GaussianBlur(dst1, (1, 1), 0, 0)infmg_3 = back0 + 2 * infmg_2 - 255# cv2.imshow("高斯滤波", infmg_3)infmg_4 = cv2.addWeighted(back0, 0.2, infmg_3, 0.8, 0)img0 = cv2.add(img, infmg_4)     #img是原图,infmg_4是最终滤波的结果        cv2.imshow("美颜结果", img0)cv2.imwrite("美颜结果.jpg", img0)
while 1:key = cv2.waitKey(1)if key > 0:break
cv2.destroyAllWindows()

效果

本来放图了,后来想想放别人的图都不合适,感兴趣的大佬自己去试吧。

python opencv 利用HSV,YUV(YCbCr)实现皮肤检测与抠图,与磨皮美颜相关推荐

  1. 使用Python,OpenCV在视频中进行实时条形码检测

    使用Python,OpenCV在视频中进行实时条形码检测 1. 步骤 2. 适用场景及优化 3. 总结 4. 源码 参考 上一篇博客介绍了如何检测和查找图像中的条形码.这篇博客将进行一些优化以检测实时 ...

  2. Python+OpenCV利用KNN背景分割器进行静态场景行人检测与轨迹跟踪

    前言 视频图像中的目标检测与跟踪,是计算机视觉的基础课题,同时具有广泛的应用价值.视觉目标(单目标)跟踪任务就是在给定某视频序列初始帧的目标大小与位置的情况下,预测后续帧中该目标的大小与位置.本篇文章 ...

  3. Python 3 利用 Dlib 和 sklearn 人脸笑脸检测机器学习建模

    0. 引言 利用机器学习的方法训练微笑检测模型,输入一张人脸照片,判断是否微笑: 精度在 95% 左右( 使用的数据集中 69 张没笑脸,65 张有笑脸 ): 图1 测试图像与检测结果 项目实现的笑脸 ...

  4. 双目测距代码 python opencv 利用双目摄像头拍照,测距

    环境:ubuntu14.04 软件:opencv3.3 +pycharm 好久没有写博客了,手都感觉好生疏,最近一直在研究工控机,水下机器人等,好不容易闲下来,没办法呀,继续前行吧,前面一直说双目测距 ...

  5. python opencv 利用 GrabCut 算法(opencv已经实现)从图像中分离出前景

    # 利用GrabCut算法从图像中分离出前景 import numpy as np import cv2 as cv from matplotlib import pyplot as pltimg = ...

  6. python opencv 利用分水岭算法实现对物体的分割 图文详细注释版 以分割官网提供的硬币为例

    分水岭算法可以实现自动分割多个物体,opencv中 cv.watershed() 函数实现了分水岭算法 话不多说,上代码 # 利用分水岭算法分离多个相同硬币 import numpy as np im ...

  7. opencv利用HSV图像进行颜色筛选

    目标 在本教程中,您将学习如何: 使用OpenCV cv :: inRange函数执行基本阈值操作. 基于HSV颜色空间中的像素值范围来检测对象. 原理 在上一个教程中,我们学习了如何使用cv :: ...

  8. 基于python+opencv利用颜色,区分多个目标(附带详细代码)

    效果图 先上个效果图: 视频可能看不清,解释一下:就是通过hsv色彩空间将蓝色和红色同时识别出来,并且区分它们,画出标志标出坐标. 说明 本实验仅适用于基于色彩的识别与区分,比如多种颜色的小球的识别与 ...

  9. python opencv 通过hsv阈值法扣取药盒 并矫正

    抠药盒并矫正 原图 效果图 目录截图 hsv调节代码 hsv.py 扣取矫正代码 1.py 原图 效果图 目录截图

最新文章

  1. PC上安装MAC X Lion
  2. AVR系列之ADC转换
  3. Java-Reflection反射-获取包括父类在内的所有字段
  4. Android三个Version的作用
  5. Hadoop基于Shell命令与底层Unix操作系统的交互
  6. 深度学习(二十三)——Fast Image Processing, SVDF, LCNN, LSTM进阶
  7. 1439: 2.4.5 Fractions to Decimals 分数化小数
  8. linux使用命令有什么用,学linux有什么用_Linux初学者学习命令有什么意义
  9. 西门子系列PLC教学视频资源3——S7-1500博图
  10. Android开发学习(3)Hello Android!
  11. 计算机网络应用ppt,1分钟骚操作顶别人10分钟!不可不懂的PPT神技
  12. WebView截取长图
  13. 链路状态路由协议-OSPF
  14. 如何实现镜像网站内容的同步
  15. 手机怎么扫描照片成电子版?手把手教你快速搞定
  16. 从实战学习微信小程序-电商星星评分功能(五)
  17. 跳台阶算法的三种实现方案(PHP)
  18. BATMAN-ADV
  19. Asp.NET Core 加载静态文件404
  20. 【技巧收集】MATLAB乱码问题的解决

热门文章

  1. 网易杭研易盾实习心得
  2. 我们造出了打破次元壁的锤子,然后呢?
  3. 共享虚拟机是什么意思_苹果笔记本电脑MacBook双系统or虚拟机选择指南
  4. Win10电脑很卡反应很慢该如何处理
  5. 系数( coefficients)、因数或因子( factors)
  6. 力扣(LeetCode)怎么刷题,以排序算法为例
  7. 互联网APP监控即时报警解决初步方案
  8. 新鲜出炉的连连看连接算法Python版
  9. git命令 统计某成员/全部人员的代码提交量
  10. postgre导入dmp文件