基于opencv的皮肤检测

修改自opencv的adaptiveskindetector.cpp,去掉了复杂的命令行参数输入,只需要一个网络摄像头即可运行。

原理方面大致看了下,主要还是利用HSV空间的色调信息。

效果还可以,但似乎对于白色,尤其是乳白色的墙壁,壁板等检测效果较差。

这是在这里公布的第一个小东西,尽量一周更新一个,基本都会附带源代码(C++, VS2008)

基于opencv的皮肤检测基于opencv的皮肤检测皮肤检测

/************************************************************************//* 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

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月7日 上午12:25
下一篇 2023年2月7日 上午12:25

相关推荐