基于opencv的皮肤检测

本文介绍了一个改进的皮肤检测算法,该算法基于OpenCV的HSV颜色空间,仅需一个网络摄像头即可运行。效果良好,但白色墙面的检测表现不佳。提供完整源代码,每周更新一次。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

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

 

ContractedBlock.gifExpandedBlockStart.gif皮肤检测
/************************************************************************/
/* adaptive skin detection
modified from opencv's adaptiveskindetector.cpp
opencv2.0 is required
welcome 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值