日韩性视频-久久久蜜桃-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。




    總結

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

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

    主站蜘蛛池模板: av黄色片 | 视频一区在线免费观看 | 国产哺乳奶水91在线播放 | 天天天天天天干 | 精品午夜一区二区三区在线观看 | 色综合av综合无码综合网站 | 欧美一级一级 | 一级做a爰 | 超碰2019| 国产调教在线观看 | 99情趣网| 可以直接在线观看的av | 亚洲丝袜中文字幕 | 国产99久久九九精品无码免费 | 日本乱大交xxxx公交车 | 欧美在线播放 | 久久精品国产99精品国产亚洲性色 | 黑人干亚洲女 | 91精品国产闺蜜国产在线闺蜜 | 五月天福利视频 | 久久婷婷国产麻豆91天堂 | 免费成人高清 | 精品伦精品一区二区三区视频密桃 | 欧美激情久久久久久 | 国产在线精品视频 | 亚洲精品一区二区三区四区五区 | 色网站免费在线观看 | 国产aaa级片 | 中文字幕乱码无码人妻系列蜜桃 | 日韩成人综合 | 99久久精品免费看国产免费软件 | 色婷婷亚洲一区二区三区 | 亚洲高清视频在线观看 | 久久久亚洲国产精品 | 黄色二级视频 | 成人欧美在线 | 欧美黑人性猛交xxxx | 黄色一级片免费在线观看 | 韩国三级视频 | 中文字幕亚洲在线观看 | 成人亚洲电影 | xxsm.com | 亚洲综合视频在线播放 | 日本韩国在线播放 | 毛片在线免费观看网址 | 欧美三级网站 | 少妇把腿扒开让我舔18 | 亚洲大片免费观看 | 蜜臀aⅴ国产精品久久久国产老师 | 少女忠诚电影高清免费 | 精品中文字幕一区二区 | 在线观看免费日韩av | 熟睡人妻被讨厌的公侵犯 | 日韩人妻一区二区三区蜜桃视频 | 91精品人妻一区二区三区蜜桃欧美 | 国产精品国产三级国产aⅴ浪潮 | 精东影业一区二区三区 | 葵司一区二区 | 日本伦理在线 | 日本东京热一区二区 | 爱爱视频在线免费观看 | 你懂的在线观看网址 | 初恋视频污 | xxxxx黄色| 久久久国产成人一区二区三区 | 欧美xxxx69| 欧美三级视频在线观看 | 黄网在线观看免费 | 理论片在线观看理伦片 | 天天躁夜夜躁 | 后进极品美女圆润翘臀 | 午夜影院h | 免费一级欧美片在线播放 | 国产成人自拍视频在线观看 | 精品人妻码一区二区三区红楼视频 | 日韩城人视频 | 娇小激情hdxxxx学生 | 最色网站| 欧美黄色视屏 | 欧美怡红院 | 成人看片泡妞 | 波多野结衣一本一道 | 天天操天天操天天操天天操天天操 | 久青草视频 | 深夜网站在线观看 | 一区二区三区伦理片 | 少妇免费看 | 国产精品xxx在线观看 | 超碰视屏| 天堂资源在线播放 | 欧美日韩精品一区二区三区视频播放 | 日本老妇性生活 | 日本美女一级片 | 台湾chinesehdxxxx少妇 | 超碰人人99 | 天天摸日日摸狠狠添 | 久久伊人成人网 | 亚洲三级一区 | 爱情岛黄色 |