100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > opencv_deeplearning实战2:基于颜色阈值的皮肤检测

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

时间:2022-12-13 23:58:31

相关推荐

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

一、总概

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

整体代码参考博客,但是题主的源代码并不适合,所以我做了修改,具体见以下代码。

二、代码

'''皮肤检测:利用皮肤颜色的HSV范围,去掉其他的区域,实现皮肤检测'''import numpy as npimport argparseimport 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之道】,一起学习交流~~

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。