opencv_deeplearning实战2:基于颜色阈值的皮肤检测

一、总概

今天写了一篇基于深度学习的人脸检测,写完下午就开始实战第二篇,皮肤检测。原理很简单,就是基于HSV的阈值处理。为什么不用BGR阈值,因为HSV的颜色空间,更加直观,特别适用于颜色分割。具体可以参考博客,今天在调试HSV空间上浪费了很多时间,总是找不对范围。也试过色彩提取软件,但是没有效果,取出的范围和opencv还是有很大的出入,最终只能挑一个效果比较好的范围。
整体代码参考博客,但是题主的源代码并不适合,所以我做了修改,具体见以下代码。

二、代码

'''
皮肤检测:利用皮肤颜色的HSV范围,去掉其他的区域,实现皮肤检测
'''
import numpy as np
import argparse
import cv2
 
# 定义皮肤的范围,具体自己调整
lower = np.array([0, 50, 100], dtype = "uint8")
upper = np.array([25, 255, 255], dtype = "uint8")

camera = cv2.VideoCapture(0) # 开启摄像头


while True:
	
	(grabbed, frame) = camera.read() #grabbed为布尔类型,true表示获取到帧数

	frame = cv2.resize(frame, (400,400))
	# 将BGR格式转为HSV颜色空间
	# HSV在用于指定颜色分割时,有比较大的作用
	hsvImage = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) 
   
	# 创建掩码,q低于lower或高于upper的,设置为0,在范围内设置为255
	# 这样便可以得到皮肤的像素范围
	skinMask = cv2.inRange(hsvImage, lower, upper)

	# 将掩码和原图进行“与”运算,这样原图便只保留皮肤区域
	skin = cv2.bitwise_and(frame, frame, mask = skinMask)
	
	# np.hstack是将原图和检测的图捆绑显示(将矩阵横向并行)
	cv2.imshow("images", np.hstack([frame,hsvImage, skin]))

	if cv2.waitKey(1) & 0xFF == ord("q"):
		break

# 释放资源
camera.release()
cv2.destroyAllWindows()

里面的注释已经很详细,欢迎留言交流。这里我不用开闭运算和高斯滤波,因为觉得没什么效果,读者不防试一下。

三、效果

这里写图片描述

效果一般,有很多噪声点,但是总体的皮肤区域都出来了。

四、总结

基于颜色阈值的方法,我个人觉得不好用。因为受环境影响非常大,特别是光照,以及背景。除非背景比较单一,且稳定,否则一般不考虑这个方法。
欢迎一起学习交流,源代码也可以去github下载。

欢迎关注我的公众号【CV之道】,一起学习交流~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JackkoLing

感谢你的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值