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. 统计肤色模型简介         前几篇文章提出的参数肤色模型,由于参数值固定,所以来自测试图像集的分割误差有可能很大(不过在光照足够的情况下已经够用了)。对于光...

YCbCr颜色空间下的一个简便的肤色模型

转自http://www.cnblogs.com/tornadomeet/archive/2012/12/05/2802428.html   前言    最近课题研究上想采用皮肤信息,但是个人...
  • hqh45
  • hqh45
  • 2014年03月27日 16:31
  • 2445

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

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

OpenCV Using Python——RGB颜色空间中的肤色检测

RGB颜色空间中的肤色检测 1. 问题         很多相关文章中都会每每在肤色检测时都会提到:RGB颜色空间中肤色受光照影响,背光时肤色都是黑的,当然会受光照影响了。         之前像我这...

OpenCV Using Python——RGB颜色空间和YCbCr颜色空间的混合肤色检测

RGB颜色空间和YCbCr颜色空间的混合肤色检测 1. 颜色空间混合肤色检测简介         Kukharev等人为了提高模型的稳定性,将多个颜色空间结合,提出RGB颜色空间和YCbCr颜...

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

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

肤色检测 YCrCb 模型 opencv 源代码

  • 2010年12月01日 12:14
  • 486KB
  • 下载

肤色检测算法 - 基于不同颜色空间简单区域划分的皮肤检测算法

本文涉及的很多算法,在网络上也有不少同类型的文章,但是肯定的一点就是,很多都是不配代码的,或者所附带的代码都是象征性的,速度慢,不优雅,不具有实用价值,本文努力解决这些问题。       文中各...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:openCV转换颜色空间,建立人体肤色模型
举报原因:
原因补充:

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