多语言展示
当前在线:888今日阅读:23今日分享:25

通过OTSU二值方法进行肤色检查(python)

手势识别中首先要进行肤色检查,判断hand在那里,常用的方法有好几种,先来介绍比较传统的OTSU二值方法。
工具/原料
1

pycharm python 编辑器

2

windows7环境 opencv 模块

方法/步骤
1

我们知道YUV色彩模型源于RGB模型,亮度和色度分离开,适合于图像处理。YCbCr模型来源于YUV模型,多用于数字视频。比如H.264(用过FFMPEG的都知道)YCrCb适用于显示器 Y指亮度分量,Cb指蓝色色度分量,而Cr指红色色度分量

2

import cv2  as cvimport  numpy as npfrom random import random from random import randintimage = cv.imread('c:\\handtest.jpg', cv.IMREAD_COLOR)cv.imshow('image', image)

3

YCrCb = cv.cvtColor(image, cv.COLOR_BGR2YCrCb) # 把图像转换到YCrCbcv.imshow('YCrCb', YCrCb)

4

# 分别获取Y, Cr, Cb通道图像(Y, Cr, Cb) = cv.split(YCrCb) cv.imshow('Y', Y)cv.imshow('Cr', Cr)cv.imshow('Cb', Cb)

5

# 高斯滤波, 对红色分量进行高斯滤波 消除边缘的影响  采用(5, 5)核GaussianBlur = cv.GaussianBlur(Cr, (5, 5), 0)      cv.imshow('GaussianBlur', GaussianBlur)

6

# 用经典的OTSU算法 二值化图像ret, threshold = cv.threshold(GaussianBlur, 0, 255, cv.THRESH_BINARY + cv.THRESH_OTSU)cv.imshow('threshold', threshold )cv.waitKey(0)cv.destroyAllWindows()

7

小结:二值化方法检测是可以实现肤色检测的,但是不完美有些离散斑块

注意事项
1

优点:cv.threshold 简单易操作

2

缺点: 有些许离散斑块

推荐信息