openCV转换颜色空间,建立人体肤色模型

转载 2008年09月16日 23:26:00

台湾人的blog,ms是
http://finalevil.blogspot.com/search/label/0.4%EF%BC%9A%E7%A8%8B%E5%BC%8F-OpenCV%E5%AD%B8%E7%BF%92%E7%AD%86%E8%A8%98
 

[Introduction]I find some questions when using opencv today.The color-space convert function cvCvtColor seems problematic. I'm not sure.But when I convert the RGB to YCrCb,the result has error.

今天在寫一個很單純的Skin color modal,
用數學模型替人的皮膚顏色建立可以判斷的標準,這個顏色是人的皮膚 or 不是人的皮膚?
有各式各樣的方法來建立此一數學模型。

像是這篇用Gussian Modal(高斯分佈模型)
Face detection in color images using AdaBoost algorithm based on skin color information
來解釋皮膚的顏色分布。

或是這篇
Fuzzy System Learned Through Fuzzy Clustering and Support Vector Machine for Human Skin Color Segmentation
用Fuzzy和Support Vector Machine來切割出圖片中屬於人類皮膚的部分。

但是,這些方法都過於複雜容易影響整個人臉偵測與辨識的效率,造成人臉偵測無法在即時系統運作的問題。所以目前不考慮這些較為複雜的數學模型。

依照這篇論文的做法
Face Detection in Color Images using Wavelet Packet Analysis
我嘗試暫時先用簡單的不等式來替代膚色的截取。不等式內容如下:
6 

關於OpenCV的重點來了 = =

我要先將RGB的色彩轉換到對光照亮度比較不敏感的YCrCb空間,所以我直接使用OpenCV的cvCvtColor方法,但是我得到的結果卻與論文上轉換色彩空間的方法不一樣。
同樣是YCrCb難道有第二種算法?!!
因此找出來的膚色位置都不是正確的。

參考OpenCV中文論壇
對cvCvtColor的空間轉換是這樣解釋的
Y=0.299*R + 0.587*G + 0.114*B
Cr=(R-Y)*0.713 + 128
Cb=(B-Y)*0.564 + 128


但是我出來的問題卻是上面的公式不對,
我後來改用另一篇論文提供的公式如下:
1


雖然我覺得OpenCV在色彩空間轉換的function似乎有問題,但還是說明一下怎麼使用,
有興趣的朋友可以踹踹看,是不是正常work

記得先用cvLoadImage載入圖片到pImg
//建立三個單通道的圖片指標
IplImage* pCh[3];
for(int i=0;i<3;i++)
    pCh[i]=cvCreateImage(cvSize(pImg->width,pImg->height),pImg->depth,1);

//實際將pImg鐘的圖片,轉換到YCrCb色彩空間,並存在pYcc裡面
cvCvtColor(pImg,pYcc,CV_BGR2YCrCb);

//最後,我們可以把pYcc裡面有Y,Cb,Cr三個通道的資料,分解開來,
//存到pCh[0],pCh[1],pCh[2]
cvSplit(pYcc,pCh[0],pCh[1],pCh[2],0);

所以pCh[0],pCh[1],pCh[2]分別表示Y,Cr,Cb的數值。

總之最後有結果囉。以下是原圖:
Untitled-4 

下圖保留了被認定是膚色的部分:
5


結論:使用OpenCV的時候請小心,他也許不是錯的,但可能不是你要的。

OpenCV Using Python——RGB颜色空间中的统计肤色模型

RGB颜色空间中的统计肤色模型 1. 统计肤色模型简介         前几篇文章提出的参数肤色模型,由于参数值固定,所以来自测试图像集的分割误差有可能很大(不过在光照足够的情况下已经够用了)。对于光...
  • shadow_guo
  • shadow_guo
  • 2015年02月09日 12:52
  • 2174

基于OpenCV 肤色检测

一、相关代码如下 //肤色检测 void IMG_ComplexionDetector(IplImage* img) {       Mat imgROI(img);       Mat ROI_ma...
  • tiemaxiaosu
  • tiemaxiaosu
  • 2016年06月23日 16:27
  • 711

OpenCV Using Python——HSV颜色空间和改进的YCbCr颜色空间中的肤色检测

HSV颜色空间中的肤色检测 1. HSV颜色空间的肤色模型简介         Pitas等人提出在HSV空间建立肤色模型。不要求颜色归一化并且对光照鲁棒性很强,条件同时满足才会被分割成皮肤。实现条件...
  • shadow_guo
  • shadow_guo
  • 2015年02月07日 18:03
  • 3581

【OpenCV】基于HSV的肤色分割

//函数功能:在HSV颜色空间对图像进行肤色模型分割 //输入:src-待处理的图像,imgout-输出图像 //返回值:返回一个iplimgae指针,指向处理后的结果 IplImage* SkinS...
  • u012306541
  • u012306541
  • 2015年03月04日 22:09
  • 2351

HSV颜色空间中的肤色检测

HSV颜色空间中的肤色检测
  • jacke121
  • jacke121
  • 2017年09月06日 07:42
  • 570

opencv椭圆肤色模型人脸检测

void ellipse(Mat& img, Point center, Size axes, double angle, double startAngle, double endAngle, ...
  • electronic49
  • electronic49
  • 2017年03月15日 11:56
  • 478

Opencv 基于肤色的手势分割

首先通过摄像头采集图像,用Otsu方法进行二值化处理,然后找出最大两个连通区域,此处默认有手和脸,最后通过指尖检测算法,将脸部排除。 #include "cxcore.h" #include "mat...
  • BBZZ2
  • BBZZ2
  • 2016年11月16日 14:15
  • 787

opencv学习笔记(一):基于YCrCb颜色空间的肤色检测

环境:Windows+VisualStudio2015+ C++ +OpenCV2.7.9 之前尝试写过基于HSV颜色空间的肤色识别程序,发现效果不甚理想,环境噪声比较大,而且光照变化时的检...
  • wzmsltw
  • wzmsltw
  • 2016年02月13日 11:58
  • 7051

基于YCbCr空间的肤色建模的常用方法及实例

目前常用的静态肤色建模方法主要有:     阈值法,简单高斯模型,混合高斯模型,直方图统计和区域级检测。 % plot 3D Fitted Gaussian Mixture    clo...
  • SoaringLee_fighting
  • SoaringLee_fighting
  • 2017年06月10日 20:13
  • 856

基于统计的肤色检测

一、概述        根据有没有涉及成像过程,可以将肤色检测方法分成两种基本类型:基于统计的方法和基于物理的方法。基于统计的肤色检测通过建立肤色统计模型进行肤色检测,主要包括两个步骤:颜色空间变换和...
  • tiemaxiaosu
  • tiemaxiaosu
  • 2016年06月23日 16:29
  • 1900
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:openCV转换颜色空间,建立人体肤色模型
举报原因:
原因补充:

(最多只允许输入30个字)