閱讀927 返回首頁    go 外匯


基於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;
}

基於opencv的皮膚檢測



最後更新:2017-04-03 05:40:07

  上一篇:go Swift結構體與類
  下一篇:go 優雅的android數據庫編程