927
外匯
基於opencv的皮膚檢測
一個超精準的膚色檢測!!
修改自opencv的adaptiveskindetector.cpp,去掉了複雜的命令行參數輸入,隻需要一個網絡攝像頭即可運行。
原理方麵大致看了下,主要還是利用HSV空間的色調信息。
效果還可以,但似乎對於白色,尤其是乳白色的牆壁,壁板等檢測效果較差。
這是在這裏公布的第一個小東西,盡量一周更新一個,基本都會附帶源代碼(C++, VS2008)

/************************************************************************/
/* adaptive skin detection
modified from opencv's adaptiveskindetector.cpp
opencv2.0 is required
welcome to visit my website: https://yangyangwenjia.appspot.com/
*/
/************************************************************************/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <ctime>
#include <cvaux.h>
#include <highgui.h>
int main(int argc, char** argv )
{
CvAdaptiveSkinDetector filter(1, CvAdaptiveSkinDetector::MORPHING_METHOD_ERODE_DILATE);
int camWidth = 640;
int camHeight = 480;
IplImage *maskImg = cvCreateImage( cvSize(camWidth, camHeight), IPL_DEPTH_8U, 1);
IplImage *skinImg = cvCreateImage( cvSize(camWidth, camHeight), IPL_DEPTH_8U, 3);
cvNamedWindow("skin", CV_WINDOW_AUTOSIZE);
cvNamedWindow("source", CV_WINDOW_AUTOSIZE);
CvCapture* capture = cvCaptureFromCAM( 0 );
IplImage* frame = 0;
for(;;)
{
cvZero(skinImg);
frame = cvQueryFrame( capture );
if( !frame )
break;
filter.process(frame, maskImg); // process the frame
cvCopy(frame,skinImg,maskImg);
cvShowImage ("skin", skinImg);
cvShowImage ("source", frame);
if (cvWaitKey(1) == 27)
break;
}
cvReleaseImage(&skinImg);
cvReleaseImage(&maskImg);
cvReleaseCapture( &capture );
cvDestroyWindow("skin");
cvDestroyWindow("source");
return 0;
}
/* adaptive skin detection
modified from opencv's adaptiveskindetector.cpp
opencv2.0 is required
welcome to visit my website: https://yangyangwenjia.appspot.com/
*/
/************************************************************************/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <ctime>
#include <cvaux.h>
#include <highgui.h>
int main(int argc, char** argv )
{
CvAdaptiveSkinDetector filter(1, CvAdaptiveSkinDetector::MORPHING_METHOD_ERODE_DILATE);
int camWidth = 640;
int camHeight = 480;
IplImage *maskImg = cvCreateImage( cvSize(camWidth, camHeight), IPL_DEPTH_8U, 1);
IplImage *skinImg = cvCreateImage( cvSize(camWidth, camHeight), IPL_DEPTH_8U, 3);
cvNamedWindow("skin", CV_WINDOW_AUTOSIZE);
cvNamedWindow("source", CV_WINDOW_AUTOSIZE);
CvCapture* capture = cvCaptureFromCAM( 0 );
IplImage* frame = 0;
for(;;)
{
cvZero(skinImg);
frame = cvQueryFrame( capture );
if( !frame )
break;
filter.process(frame, maskImg); // process the frame
cvCopy(frame,skinImg,maskImg);
cvShowImage ("skin", skinImg);
cvShowImage ("source", frame);
if (cvWaitKey(1) == 27)
break;
}
cvReleaseImage(&skinImg);
cvReleaseImage(&maskImg);
cvReleaseCapture( &capture );
cvDestroyWindow("skin");
cvDestroyWindow("source");
return 0;
}
基於opencv的皮膚檢測
最後更新:2017-04-03 05:40:07