python opencv 利用HSV,YUV(YCbCr)实现皮肤检测与抠图,与磨皮美颜
皮肤检测与抠图
皮肤检测的方法很多,这里写的是最简单的方法,感兴趣的同学可以自己加上椭圆检测,膨胀腐蚀等,使得检测与抠图更加精确。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)实现皮肤检测与抠图,与磨皮美颜相关推荐
- 使用Python,OpenCV在视频中进行实时条形码检测
使用Python,OpenCV在视频中进行实时条形码检测 1. 步骤 2. 适用场景及优化 3. 总结 4. 源码 参考 上一篇博客介绍了如何检测和查找图像中的条形码.这篇博客将进行一些优化以检测实时 ...
- Python+OpenCV利用KNN背景分割器进行静态场景行人检测与轨迹跟踪
前言 视频图像中的目标检测与跟踪,是计算机视觉的基础课题,同时具有广泛的应用价值.视觉目标(单目标)跟踪任务就是在给定某视频序列初始帧的目标大小与位置的情况下,预测后续帧中该目标的大小与位置.本篇文章 ...
- Python 3 利用 Dlib 和 sklearn 人脸笑脸检测机器学习建模
0. 引言 利用机器学习的方法训练微笑检测模型,输入一张人脸照片,判断是否微笑: 精度在 95% 左右( 使用的数据集中 69 张没笑脸,65 张有笑脸 ): 图1 测试图像与检测结果 项目实现的笑脸 ...
- 双目测距代码 python opencv 利用双目摄像头拍照,测距
环境:ubuntu14.04 软件:opencv3.3 +pycharm 好久没有写博客了,手都感觉好生疏,最近一直在研究工控机,水下机器人等,好不容易闲下来,没办法呀,继续前行吧,前面一直说双目测距 ...
- python opencv 利用 GrabCut 算法(opencv已经实现)从图像中分离出前景
# 利用GrabCut算法从图像中分离出前景 import numpy as np import cv2 as cv from matplotlib import pyplot as pltimg = ...
- python opencv 利用分水岭算法实现对物体的分割 图文详细注释版 以分割官网提供的硬币为例
分水岭算法可以实现自动分割多个物体,opencv中 cv.watershed() 函数实现了分水岭算法 话不多说,上代码 # 利用分水岭算法分离多个相同硬币 import numpy as np im ...
- opencv利用HSV图像进行颜色筛选
目标 在本教程中,您将学习如何: 使用OpenCV cv :: inRange函数执行基本阈值操作. 基于HSV颜色空间中的像素值范围来检测对象. 原理 在上一个教程中,我们学习了如何使用cv :: ...
- 基于python+opencv利用颜色,区分多个目标(附带详细代码)
效果图 先上个效果图: 视频可能看不清,解释一下:就是通过hsv色彩空间将蓝色和红色同时识别出来,并且区分它们,画出标志标出坐标. 说明 本实验仅适用于基于色彩的识别与区分,比如多种颜色的小球的识别与 ...
- python opencv 通过hsv阈值法扣取药盒 并矫正
抠药盒并矫正 原图 效果图 目录截图 hsv调节代码 hsv.py 扣取矫正代码 1.py 原图 效果图 目录截图
最新文章
- PC上安装MAC X Lion
- AVR系列之ADC转换
- Java-Reflection反射-获取包括父类在内的所有字段
- Android三个Version的作用
- Hadoop基于Shell命令与底层Unix操作系统的交互
- 深度学习(二十三)——Fast Image Processing, SVDF, LCNN, LSTM进阶
- 1439: 2.4.5 Fractions to Decimals 分数化小数
- linux使用命令有什么用,学linux有什么用_Linux初学者学习命令有什么意义
- 西门子系列PLC教学视频资源3——S7-1500博图
- Android开发学习(3)Hello Android!
- 计算机网络应用ppt,1分钟骚操作顶别人10分钟!不可不懂的PPT神技
- WebView截取长图
- 链路状态路由协议-OSPF
- 如何实现镜像网站内容的同步
- 手机怎么扫描照片成电子版?手把手教你快速搞定
- 从实战学习微信小程序-电商星星评分功能(五)
- 跳台阶算法的三种实现方案(PHP)
- BATMAN-ADV
- Asp.NET Core 加载静态文件404
- 【技巧收集】MATLAB乱码问题的解决