修改自opencv的adaptiveskindetector.cpp,去掉了复杂的命令行参数输入,只需要一个网络摄像头即可运行。
原理方面大致看了下,主要还是利用HSV空间的色调信息。
效果还可以,但似乎对于白色,尤其是乳白色的墙壁,壁板等检测效果较差。
这是在这里公布的第一个小东西,尽量一周更新一个,基本都会附带源代码(C++, VS2008)
皮肤检测
/************************************************************************//* adaptive skin detectionmodified from opencv's adaptiveskindetector.cppopencv2.0 is requiredwelcome to visit my website: http://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;}
hope you find it useful~
原文链接: https://www.cnblogs.com/yangyangcv/archive/2010/05/14/1735559.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/10857
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!