2016年4月1日 星期五

Skin Detection using CvAdaptiveSkinDetector on OpneCV

介紹:
  • 如何使用CvAdaptiveSkinDetector做膚色偵測,必須是串流影像,因為需要不段的更新膚色模組(HSV顏色空間)
Introduction:
  • How to do skin detection using CvAdaptiveSkinDetector in OpenCV library. 

開發環境:
  • Visual Studio 2010
  • Windows 7
  • OpenCV 2.4.5


#include "stdafx.h"
#include <highgui.h>
#include <cvaux.h>

void main()
{
 IplImage *pSrcImg;
 IplImage *pDstImg;
 CvCapture *capture;
 capture = cvCaptureFromCAM(0);

 CvAdaptiveSkinDetector skin_detector(1, 1);
 while(true)
 {
  pSrcImg = cvQueryFrame(capture);
  pDstImg = cvCreateImage(cvGetSize(pSrcImg), IPL_DEPTH_8U, 1);
  cvZero(pDstImg);
  skin_detector.process(pSrcImg, pDstImg);
  cvSet(pDstImg, cvScalar(255), pDstImg);

  cvShowImage("pSrcImg", pSrcImg);
  cvShowImage("pDstImg", pDstImg);

  cvReleaseImage(&pDstImg);
  cvWaitKey(30);
 }
 cvReleaseImage(&pSrcImg);
}

編譯成功後,可看到進行膚色偵測後的結果(白色區塊)。

演算法來自An adaptive real-time skin detector based on Hue thresholding: A comparison on two motion tracking methods。理論上,每張影像分別做膚色偵測(Global Skin Hue Histogram)與移動偵測(Motion Detection),再將兩個資訊做交集,認定同為移動與膚色像素點的HSV值肯定是人的膚色值(Local Skin Hue Histogram),再利用此膚色模組進行一次膚色偵測,最後偵測出的影像結果(Filtered Image)就是答案。




CvAdaptiveSkinDetector::CvAdaptiveSkinDetector(int samplingDivider = 1, int morphingMethod = MORPHING_METHOD_NONE)
  • samplingDivider : 參數代表樣本採樣的間隔
  • morphingMethod : 代表型態學的方式ERODE或DILATE

virtual void CvAdaptiveSkinDetector::process(IplImage *inputBGRImage, IplImage *outputHueMask)
  • inputBGRImage : 被偵測的影像
  • outputHueMask : 偵測結果的影像
相關文章:OpenCV學習日記

0 意見:

張貼留言