最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python傳統(tǒng)圖像處理之皮膚區(qū)域檢測詳解

 更新時間:2021年12月01日 16:40:47   作者:watersink  
這篇文章主要介紹了在不同情景下對傳統(tǒng)圖像進行皮膚區(qū)域檢測,文章中的代碼具有一定的參考價值,感興趣的小伙伴可以跟隨小編一起來學習學習

1.RGB空間

膚色在RGB模型下的范圍基本滿足以下約束:

在均勻光照下應滿足以下判別式:

R>95 AND G>40 B>20 AND MAX(R,G,B)-MIN(R,G,B)>15 AND ABS(R-G)>15 AND R>G AND R>B

在側光拍攝環(huán)境下:

R>220 AND G>210 AND B>170 AND ABS(R-G)<=15 AND R>B AND G>B

代碼:

def skinMask_rgb(image):
    b, g, r = cv2.split(image)
    mask_uniformity = (r>95)*(g>40)*(b>20)* (np.max(image, axis=2) -np.min(image,axis=2)>15)* (abs(r-g)>15)*(r>g)*(r>b)
    mask_side = (r>220)*(g>210)*(b>170)*(abs(r-g)<=15)*(r>b)*(g>b)
    mask = mask_uniformity|mask_side
    skin = np.array(mask, np.uint8)*255
    ratio = np.sum(skin/255)/(image.shape[0]*image.shape[1])
 
    return skin, ratio

效果:

2.Ycrcb空間

在RGB空間里人臉的膚色受亮度影響相當大,所以膚色點很難從非膚色點中分離出來,也就是說在此空間經過處理后,膚色點是離散的點,中間嵌有很多非膚色。如果把RGB轉為YCrCb空間的話,可以忽略Y(亮度)的影響,因為該空間受亮度影響很小,膚色會產生很好的類聚。這樣就把三維的空間降為二維的CrCb,膚色點會形成一定得形狀。

133≤Cr≤173

77≤Cb≤127

代碼:

def skinMask_YCrCb(image):
    YCrCb = cv2.cvtColor(image, cv2.COLOR_BGR2YCR_CB) #轉換至YCrCb空間
    (y,cr,cb) = cv2.split(YCrCb) #拆分出Y,Cr,Cb值
    skin = np.zeros(cr.shape, dtype = np.uint8)
    (x,y) = cr.shape
    
    cr_mask1 = cr >= 133
    cr_mask2 = cr <= 173
    cr_mask = cr_mask1 * cr_mask2
 
    cb_mask1 = cb >= 77
    cb_mask2 = cb <= 127
    cb_mask = cb_mask1 * cb_mask2
    mask = cr_mask * cb_mask
    skin[mask] = 255
 
    ratio = np.sum(skin/255)/(x*y)
    return skin, ratio

效果:

3.Ycrcb空間+otsu

Y表示明亮度(Luminance或Luma),也就是灰階值。Cr反映了RGB輸入信號紅色部分與RGB信號亮度值之間的差異。而Cb反映的是RGB輸入信號藍色部分與RGB信號亮度值之間的差異。

將RGB圖像轉換到YCrCb顏色空間,提取Cr分量圖像。對Cr做自二值化閾值分割處理(Otsu法)。

代碼:

def skinMask_YCrCb_otsu(image):
    YCrCb = cv2.cvtColor(image, cv2.COLOR_BGR2YCR_CB) #轉換至YCrCb空間
    (y,cr,cb) = cv2.split(YCrCb) #拆分出Y,Cr,Cb值
    
    ret, skin = cv2.threshold(cr, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
 
    ratio = np.sum(skin/255)/(image.shape[0]*image.shape[1])
    return skin, ratio

效果:

4.HSV空間

7<H<20

28<S<256

50<V<256

代碼:

def skinMask_hsv(image):
    hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
    h, s, v = cv2.split(hsv)
 
    mask = (h>7)*(h<20)*(s>28)*(v>50)
    skin = np.array(mask, np.uint8)*255
    ratio = np.sum(skin/255)/(image.shape[0]*image.shape[1])
    return skin, ratio

效果:

5.opencv自帶膚色檢測類AdaptiveSkinDetector

已經從opencv 3以上版本中移除,opencv 2中函數(shù)。

6.基于橢圓模型

將皮膚信息映射到YCrCb空間,則在CrCb二維空間中這些皮膚像素點近似成一個橢圓分布。因此如果我們得到了一個CrCb的橢圓,下次來一個坐標(Cr, Cb)我們只需判斷它是否在橢圓內(包括邊界),如果是,則可以判斷其為皮膚,否則就是非皮膚像素點。

代碼:

def skinMask_ellipse(image):
    YCrCb = cv2.cvtColor(image, cv2.COLOR_BGR2YCR_CB) #轉換至YCrCb空間
    (y,cr,cb) = cv2.split(YCrCb) #拆分出Y,Cr,Cb值
 
    skinCrCbHist = np.zeros((256,256),np.uint8)
    skinCrCbHist = cv2.ellipse(skinCrCbHist, (113, 155), (23, 15), 43.0, 0.0, 360.0, (255, 255, 255), -1)
    cv2.imwrite("ww.jpg", skinCrCbHist)
 
    skin = cv2.remap(skinCrCbHist, cb.astype(np.float32), cr.astype(np.float32), interpolation=cv2.INTER_LINEAR)
    ratio = np.sum(skin/255)/(image.shape[0]*image.shape[1])
    return skin, ratio

效果:

橢圓模型

效果

7.直方圖反向投影

反向投影可以用來做圖像分割,尋找感興趣區(qū)間??梢詫ふ胰魏蔚膔oi,這里將其用作尋找人體膚色。它會輸出與輸入圖像大小相同的圖像,每一個像素值代表了輸入圖像上對應點屬于目標對象的概率,簡言之,輸出圖像中像素值越高的點越可能代表想要查找的目標。直方圖投影經常與camshift(追蹤算法)算法一起使用。

操作步驟:

(1)截取若干張不同膚色的圖片,最好覆蓋常見的所有膚色(如下圖)

(2)對所有膚色的圖片一起做色彩直方圖(利用OpenCV中的calcHist函數(shù))

(3)新建一個與待檢測圖片同尺寸的灰度圖片,找到待檢測圖片中每顆像素點的顏色在色彩直方圖中對應柵格的數(shù)值(即統(tǒng)計中出現(xiàn)的次數(shù)),并將該數(shù)值賦值予新建灰度圖片中與該檢測像素同位置的像素(利用OpenCV中的calcBackProject函數(shù))。圖像中像素亮度越高,待檢測圖像該位置處是膚色的概率越大。

代碼:

def skinMask_hist_backproject(target, roi_image):
    #roi圖片,就想要找的的圖片
    hsv = cv2.cvtColor(roi_image,cv2.COLOR_BGR2HSV)
 
    #目標搜索圖片
    hsvt = cv2.cvtColor(target,cv2.COLOR_BGR2HSV)
 
    #計算目標直方圖
    roihist = cv2.calcHist([hsv],[0,1],None,[180,256],[0,180,0,256])
    #歸一化,參數(shù)為原圖像和輸出圖像,歸一化后值全部在2到255范圍
    cv2.normalize(roihist,roihist,0,255,cv2.NORM_MINMAX)
    dst = cv2.calcBackProject([hsvt],[0,1],roihist,[0,180,0,256],1)
 
 
    #卷積連接分散的點
    disc = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))
    dst = cv2.filter2D(dst,-1,disc)
 
    ret,skin = cv2.threshold(dst,50,255,0)
 
    ratio = np.sum(skin/255)/(target.shape[0]*target.shape[1])
return skin, ratio

效果:?

?

以上就是Python傳統(tǒng)圖像處理之皮膚區(qū)域檢測詳解的詳細內容,更多關于Python 皮膚區(qū)域檢測的資料請關注腳本之家其它相關文章!

相關文章

  • Python中搜索和替換文件中的文本的實現(xiàn)(四種)

    Python中搜索和替換文件中的文本的實現(xiàn)(四種)

    本文主要介紹了Python中搜索和替換文件中的文本的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • python實現(xiàn)計算圖形面積

    python實現(xiàn)計算圖形面積

    這篇文章主要為大家詳細介紹了python實現(xiàn)計算圖形面積,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • python語言的優(yōu)勢是什么

    python語言的優(yōu)勢是什么

    這篇文章主要介紹了python語言的優(yōu)勢是什么,從各個方面做了分析,需要的朋友們可以參考下
    2020-06-06
  • 使用Python制作簡單的小程序IP查看器功能

    使用Python制作簡單的小程序IP查看器功能

    這篇文章主要介紹了利用Python制作簡單的小程序IP查看器功能,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-04-04
  • PyQt5實現(xiàn)從主窗口打開子窗口的方法

    PyQt5實現(xiàn)從主窗口打開子窗口的方法

    今天小編就為大家分享一篇PyQt5實現(xiàn)從主窗口打開子窗口的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • python elasticsearch環(huán)境搭建詳解

    python elasticsearch環(huán)境搭建詳解

    在本篇文章里小編給大家整理的是關于python elasticsearch環(huán)境搭建的相關知識點內容,有需要的朋友們可以參考下。
    2019-09-09
  • python中路徑字符串斜杠替換方式

    python中路徑字符串斜杠替換方式

    這篇文章主要介紹了python中路徑字符串斜杠替換方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 1行Python代碼實現(xiàn)去除圖片水印詳解

    1行Python代碼實現(xiàn)去除圖片水印詳解

    這篇文章主要為大家介紹了1行Python代碼實現(xiàn)去除圖片水印詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • Python實現(xiàn)修改Excel文件的元數(shù)據

    Python實現(xiàn)修改Excel文件的元數(shù)據

    這篇文章將通過使用Python、Openpyxl模塊以及wxPython庫,實現(xiàn)創(chuàng)建一個GUI界面來輸入元數(shù)據,然后將這些元數(shù)據與Excel文件一起保存,感興趣的可以了解一下
    2023-04-04
  • pyinstaller將python程序打包為可執(zhí)行文件

    pyinstaller將python程序打包為可執(zhí)行文件

    這篇文章主要介紹了pyinstaller將python程序打包為可執(zhí)行文件,pyinstaller是一個python打包工具,它將python程序及所需依賴都打包成一個可執(zhí)行文件
    2022-08-08

最新評論

两当县| 噶尔县| 宜章县| 沈阳市| 东至县| 临夏县| 大理市| 金平| 临湘市| 张家界市| 连平县| 日照市| 南开区| 白山市| 来宾市| 奈曼旗| 广水市| 无为县| 缙云县| 白玉县| 马龙县| 望谟县| 资源县| 昭平县| 瑞昌市| 永修县| 葫芦岛市| 晴隆县| 宁明县| 柳河县| 宜良县| 曲麻莱县| 沽源县| 精河县| 台南市| 大港区| 阿克苏市| 泾阳县| 威信县| 定远县| 洮南市|