日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

肤色检测合集

發布時間:2025/7/25 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 肤色检测合集 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 HSV 顏色空間

from:?http://blog.csdn.net/onezeros/article/details/5930520

把rgb轉換到hsv空間,用h分量 進行識別,像素值在7~29之間 是膚色的幾乎全部范圍

識別會受到光照的影響。但是整體上準確度是較高的。

在白天 正常的明亮的光照下,效果非常好。

這是我在晚上拍攝的一張圖像的處理

對于不同的環境(主要是光照條件),閾值應相應 變動以提高精確度

程序源碼下載?http://download.csdn.net/source/2744062


2 YCrCb


源碼下下載?http://download.csdn.net/source/2873223

效果圖


3 3種模型

今天是地球日,就選了張相關主題的圖像做測試

?

第一種:RGB color space

第二種:RG color space

第三種:Ycrcb之cr分量+otsu閾值化

?

還有別的一些模型,效果不太好就不貼了

?

1.rgb model

[cpp]?view plain?copy
  • //?skin?region?location?using?rgb?limitation??
  • void?SkinRGB(IplImage*?rgb,IplImage*?_dst)??
  • {??
  • ????assert(rgb->nChannels==3&&?_dst->nChannels==3);??
  • ??
  • ????static?const?int?R=2;??
  • ????static?const?int?G=1;??
  • ????static?const?int?B=0;??
  • ??
  • ????IplImage*?dst=cvCreateImage(cvGetSize(_dst),8,3);??
  • ????cvZero(dst);??
  • ??
  • ????for?(int?h=0;h<rgb->height;h++)?{??
  • ????????unsigned?char*?prgb=(unsigned?char*)rgb->imageData+h*rgb->widthStep;??
  • ????????unsigned?char*?pdst=(unsigned?char*)dst->imageData+h*dst->widthStep;??
  • ????????for?(int?w=0;w<rgb->width;w++)?{??
  • ????????????if?((prgb[R]>95?&&?prgb[G]>40?&&?prgb[B]>20?&&??
  • ????????????????prgb[R]-prgb[B]>15?&&?prgb[R]-prgb[G]>15/*&&?
  • ????????????????!(prgb[R]>170&&prgb[G]>170&&prgb[B]>170)*/)||//uniform?illumination???
  • ????????????????(prgb[R]>200?&&?prgb[G]>210?&&?prgb[B]>170?&&??
  • ????????????????abs(prgb[R]-prgb[B])<=15?&&?prgb[R]>prgb[B]&&?prgb[G]>prgb[B])//lateral?illumination??
  • ????????????????)?{??
  • ????????????????????memcpy(pdst,prgb,3);??
  • ????????????}?????????????
  • ????????????prgb+=3;??
  • ????????????pdst+=3;??
  • ????????}??
  • ????}??
  • ????cvCopyImage(dst,_dst);??
  • ????cvReleaseImage(&dst);??
  • }??
  • ?

    2.rg model

    [cpp]?view plain?copy
  • //?skin?detection?in?rg?space??
  • void?cvSkinRG(IplImage*?rgb,IplImage*?gray)??
  • {??
  • ????assert(rgb->nChannels==3&&gray->nChannels==1);??
  • ??????
  • ????const?int?R=2;??
  • ????const?int?G=1;??
  • ????const?int?B=0;??
  • ??
  • ????double?Aup=-1.8423;??
  • ????double?Bup=1.5294;??
  • ????double?Cup=0.0422;??
  • ????double?Adown=-0.7279;??
  • ????double?Bdown=0.6066;??
  • ????double?Cdown=0.1766;??
  • ????for?(int?h=0;h<rgb->height;h++)?{??
  • ????????unsigned?char*?pGray=(unsigned?char*)gray->imageData+h*gray->widthStep;??
  • ????????unsigned?char*?pRGB=(unsigned?char*?)rgb->imageData+h*rgb->widthStep;??
  • ????????for?(int?w=0;w<rgb->width;w++)?{??
  • ????????????int?s=pRGB[R]+pRGB[G]+pRGB[B];??
  • ????????????double?r=(double)pRGB[R]/s;??
  • ????????????double?g=(double)pRGB[G]/s;??
  • ????????????double?Gup=Aup*r*r+Bup*r+Cup;??
  • ????????????double?Gdown=Adown*r*r+Bdown*r+Cdown;??
  • ????????????double?Wr=(r-0.33)*(r-0.33)+(g-0.33)*(g-0.33);??
  • ????????????if?(g<Gup?&&?g>Gdown?&&?Wr>0.004){??
  • ????????????????*pGray=255;??
  • ????????????}else{???
  • ????????????????*pGray=0;??
  • ????????????}??
  • ????????????pGray++;??
  • ????????????pRGB+=3;??
  • ????????}??
  • ????}??
  • ??
  • }??
  • ?

    3.cr+otsu

    [c-sharp]?view plain?copy
  • //?implementation?of?otsu?algorithm??
  • //?author:?onezeros#yahoo.cn??
  • //?reference:?Rafael?C.?Gonzalez.?Digital?Image?Processing?Using?MATLAB??
  • void?cvThresholdOtsu(IplImage*?src,?IplImage*?dst)??
  • {??
  • ????int?height=src->height;??
  • ????int?width=src->width;??
  • ??
  • ????//histogram??
  • ????float?histogram[256]={0};??
  • ????for(int?i=0;i<height;i++)?{??
  • ????????unsigned?char*?p=(unsigned?char*)src->imageData+src->widthStep*i;??
  • ????????for(int?j=0;j<width;j++)?{??
  • ????????????histogram[*p++]++;??
  • ????????}??
  • ????}??
  • ????//normalize?histogram??
  • ????int?size=height*width;??
  • ????for(int?i=0;i<256;i++)?{??
  • ????????histogram[i]=histogram[i]/size;??
  • ????}??
  • ??
  • ????//average?pixel?value??
  • ????float?avgValue=0;??
  • ????for(int?i=0;i<256;i++)?{??
  • ????????avgValue+=i*histogram[i];??
  • ????}??
  • ??
  • ????int?threshold;????
  • ????float?maxVariance=0;??
  • ????float?w=0,u=0;??
  • ????for(int?i=0;i<256;i++)?{??
  • ????????w+=histogram[i];??
  • ????????u+=i*histogram[i];??
  • ??
  • ????????float?t=avgValue*w-u;??
  • ????????float?variance=t*t/(w*(1-w));??
  • ????????if(variance>maxVariance)?{??
  • ????????????maxVariance=variance;??
  • ????????????threshold=i;??
  • ????????}??
  • ????}??
  • ??
  • ????cvThreshold(src,dst,threshold,255,CV_THRESH_BINARY);??
  • }??
  • ??
  • void?cvSkinOtsu(IplImage*?src,?IplImage*?dst)??
  • {??
  • ????assert(dst->nChannels==1&&?src->nChannels==3);??
  • ??
  • ????IplImage*?ycrcb=cvCreateImage(cvGetSize(src),8,3);??
  • ????IplImage*?cr=cvCreateImage(cvGetSize(src),8,1);??
  • ????cvCvtColor(src,ycrcb,CV_BGR2YCrCb);??
  • ????cvSplit(ycrcb,0,cr,0,0);??
  • ??
  • ????cvThresholdOtsu(cr,cr);??
  • ????cvCopyImage(cr,dst);??
  • ????cvReleaseImage(&cr);??
  • ????cvReleaseImage(&ycrcb);??
  • }??
  • ?

    原圖像

    ?

    rgb model

    ?

    rg model

    ?

    otsu+cr

    4 RGB YCrCb


    本文涉及的很多算法,在網絡上也有不少同類型的文章,但是肯定的一點就是,很多都是不配代碼的,或者所附帶的代碼都是象征性的,速度慢,不優雅,不具有實用價值,本文努力解決這些問題。

    ????? 文中各算法出現的順序并不代表算法的優越性,僅僅是作者隨機排布的而已。

    ????? 2、基于RGB顏色空間的簡單閾值膚色識別

    ???????在human skin color clustering for face detection一文中提出如下簡單的判別算式:

          R>95 And G>40 And B>20 And R>G And R>B And Max(R,G,B)-Min(R,G,B)>15 And Abs(R-G)>15?

      ? 算法非常之簡單,同樣主要把復雜的判斷條件放到后面去判斷,能有效的降低程序的執行時間,參考代碼:

    ?

    for (Y = 0; Y < Height; Y++) {Pointer = Scan0 + Y * Stride;SkinP = SkinScan0 + Y * SkinStride;for (X = 0; X < Width; X++){Blue = *Pointer; Green = *(Pointer + 1); Red = *(Pointer + 2);if (Red > 95 && Green > 40 && Blue > 20 && Red > Blue && Red > Green && Math.Abs(Red - Green) > 15){if (Blue >= Green) {Max = Blue;Min = Green;}else{Max = Green;Min = Blue;}if (Red > Max)Max = Red;else if (Red < Min)Min = Red;if (Max - Min > 15) *SkinP = 255;}Pointer += 3;SkinP++;}

    ??算法效果:

    ???????????????

            原圖             ?????? ?識別結果圖???????????????????????????????????????????????????原圖        ???     識別結果圖

    ???? 由上述結果似乎該算法得到了過多的皮膚區域,然后就是算法更喜歡美女一些(^_^)。

    ?????3、基于YCbCr顏色空間的簡單閾值膚色識別

      該算法則更為簡單,將圖像轉換到YCbCr顏色空間,然后按下述計算式判斷是否屬于皮膚區域:

        (Cb > 77 And Cb < 127)??And (Cr > 133?And Cr < 173)

    ????? 關于RGB和YCbCr顏色空間的轉換的優化算法,可參考本博客相關文章。

    ????? 由于當初寫這方面的時候沒有注明該算法的出處,現在也沒從提起了。

    ????? 代碼參考:

    for (Y = 0; Y < Height; Y++) {Pointer = Scan0 + Y * Stride;SkinP = SkinScan0 + Y * SkinStride;for (X = 0; X < Width; X++){Blue = *Pointer; Green = *(Pointer + 1); Red = *(Pointer + 2);Cb = (-176933 * Red - 347355 * Green + 524288 * Blue + 134217728) >> 20;if (Cb > 77 && Cb < 127){Cr = (524288 * Red - 439026 * Green - 85262 * Blue + 134217728) >> 20;if (Cr > 133 && Cr < 173) *SkinP = 255;}Pointer += 3;SkinP++;} }

    ?

    ??????

    ?

    ??????? ????????

    ????????????? 原圖             ?????? ???? 識別結果圖???????????????????????????????????????????????????原圖        ???     識別結果圖

    ?????誤判的區域還是很大的。

    ?????還有一種是基于YUV顏色空間進行的膚色識別,似乎也不太準確,可參考http://www.doc88.com/p-97381067005.html。




    總結

    以上是生活随笔為你收集整理的肤色检测合集的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 亚洲视频精品在线观看 | 欧美成人综合 | 亚洲日本香蕉 | 中文字幕不卡在线 | 在线观看69 | 国产69视频在线观看 | 国产精品xxxx喷水欧美 | 亚洲 欧美 日韩 国产综合 在线 | 激情文学欧美 | 国产一区不卡视频 | 香蕉视频97| 素人一区二区 | 国产精品综合久久久 | av天堂一区二区 | av色综合| 91精品视频免费看 | 国产农村妇女精品一二区 | 秋霞成人网 | 国产在线观看黄 | 国产剧情一区二区三区 | 伊人影视网 | 一级a毛片 | 91偷拍富婆spa盗摄在线 | 日韩一区二区a片免费观看 伊人网综合在线 | 亚洲国产精品va在线看黑人 | 中文字幕第100页 | 一本色道久久hezyo加勒比 | 久久久久国产精品 | 欧美国产日韩在线视频 | 黄色片视频 | 六月综合 | 高潮毛片无遮挡 | 神马影院午夜伦理片 | 岛国av大片 | 四虎色播 | 五月天婷婷激情 | 黄骗免费网站 | 黑人一区二区三区四区五区 | 色片免费看 | 亚洲a v网站| 国产黑丝在线观看 | 国产精品suv一区 | av在线色| 免费久久久久久 | 欧美女优在线观看 | 一本到久久 | 国产又粗又猛又色又 | 91大神精品| 一区二区三区韩国 | caoporn视频在线 | 成人精品视频一区 | 老司机av导航| 亚洲熟女综合色一区二区三区 | 蜜臀av在线免费观看 | 毛片2 | 制服丝袜成人动漫 | 国产一级做a爰片在线看免费 | youjizz日本人 | 一及黄色大片 | 日日夜夜一区二区 | 国产精品30p| 黄色国产在线视频 | aa黄色大片| av影视网 | 在线看片国产 | 亚洲日本久久 | 日本不卡一区二区在线观看 | 91中文字幕在线播放 | 欧美第一色| 大肉大捧一进一出好爽动态图 | 蜜桃成人在线视频 | 91视频网址入口 | 蜜桃成人在线观看 | 九色福利 | 久草热在线观看 | 欧美一级一级 | 国产精品久久久久久久裸模 | 五月天三级 | 综合久久久久久久久久久 | 捆绑无遮挡打光屁股调教女仆 | 亚洲第一成人在线 | 中文字幕专区 | 久久疯狂做爰流白浆xx | 久久爱一区二区 | 男女做爰猛烈高潮描写 | 打开免费观看视频在线播放 | 香蕉福利 | 瑟瑟视频免费看 | 成人动漫久久 | 综合久色 | 人操人人| 精品亚洲一区二区三区四区五区 | 永久久久久久久 | 激情五月婷婷丁香 | 中文亚洲字幕 | 天堂av一区二区三区 | free欧美性69护士呻吟 | 亚洲成a人片在线 | 欧美亚洲中文精品字幕 |