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

python opencv膚色檢測(cè)的實(shí)現(xiàn)示例

 更新時(shí)間:2020年12月21日 14:14:32   作者:George593  
這篇文章主要介紹了python opencv膚色檢測(cè)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

1 橢圓膚色檢測(cè)模型

原理:將RGB圖像轉(zhuǎn)換到Y(jié)CRCB空間,膚色像素點(diǎn)會(huì)聚集到一個(gè)橢圓區(qū)域。先定義一個(gè)橢圓模型,然后將每個(gè)RGB像素點(diǎn)轉(zhuǎn)換到Y(jié)CRCB空間比對(duì)是否再橢圓區(qū)域,是的話判斷為皮膚。

YCRCB顏色空間

橢圓模型

代碼

def ellipse_detect(image):
  """
  :param image: 圖片路徑
  :return: None
  """
  img = cv2.imread(image,cv2.IMREAD_COLOR)
  skinCrCbHist = np.zeros((256,256), dtype= np.uint8 )
  cv2.ellipse(skinCrCbHist ,(113,155),(23,15),43,0, 360, (255,255,255),-1)
 
  YCRCB = cv2.cvtColor(img,cv2.COLOR_BGR2YCR_CB)
  (y,cr,cb)= cv2.split(YCRCB)
  skin = np.zeros(cr.shape, dtype=np.uint8)
  (x,y)= cr.shape
  for i in range(0,x):
    for j in range(0,y):
      CR= YCRCB[i,j,1]
      CB= YCRCB[i,j,2]
      if skinCrCbHist [CR,CB]>0:
        skin[i,j]= 255
  cv2.namedWindow(image, cv2.WINDOW_NORMAL)
  cv2.imshow(image, img)
  dst = cv2.bitwise_and(img,img,mask= skin)
  cv2.namedWindow("cutout", cv2.WINDOW_NORMAL)
  cv2.imshow("cutout",dst)
  cv2.waitKey()

效果

2 YCrCb顏色空間的Cr分量+Otsu法閾值分割算法

原理

針對(duì)YCRCB中CR分量的處理,將RGB轉(zhuǎn)換為YCRCB,對(duì)CR通道單獨(dú)進(jìn)行otsu處理,otsu方法opencv里用threshold

代碼

def cr_otsu(image):
  """YCrCb顏色空間的Cr分量+Otsu閾值分割
  :param image: 圖片路徑
  :return: None
  """
  img = cv2.imread(image, cv2.IMREAD_COLOR)
  ycrcb = cv2.cvtColor(img, cv2.COLOR_BGR2YCR_CB)
 
  (y, cr, cb) = cv2.split(ycrcb)
  cr1 = cv2.GaussianBlur(cr, (5, 5), 0)
  _, skin = cv2.threshold(cr1,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
 
  cv2.namedWindow("image raw", cv2.WINDOW_NORMAL)
  cv2.imshow("image raw", img)
  cv2.namedWindow("image CR", cv2.WINDOW_NORMAL)
  cv2.imshow("image CR", cr1)
  cv2.namedWindow("Skin Cr+OTSU", cv2.WINDOW_NORMAL)
  cv2.imshow("Skin Cr+OTSU", skin)
 
  dst = cv2.bitwise_and(img, img, mask=skin)
  cv2.namedWindow("seperate", cv2.WINDOW_NORMAL)
  cv2.imshow("seperate", dst)
  cv2.waitKey()

效果

3 基于YCrCb顏色空間Cr, Cb范圍篩選法

 原理

類似于第二種方法,只不過(guò)是對(duì)CR和CB兩個(gè)通道綜合考慮

代碼

def crcb_range_sceening(image):
  """
  :param image: 圖片路徑
  :return: None
  """
  img = cv2.imread(image,cv2.IMREAD_COLOR)
  ycrcb=cv2.cvtColor(img,cv2.COLOR_BGR2YCR_CB)
  (y,cr,cb)= cv2.split(ycrcb)
 
  skin = np.zeros(cr.shape,dtype= np.uint8)
  (x,y)= cr.shape
  for i in range(0,x):
    for j in range(0,y):
      if (cr[i][j]>140)and(cr[i][j])<175 and (cr[i][j]>100) and (cb[i][j])<120:
        skin[i][j]= 255
      else:
        skin[i][j] = 0
  cv2.namedWindow(image,cv2.WINDOW_NORMAL)
  cv2.imshow(image,img)
  cv2.namedWindow(image+"skin2 cr+cb",cv2.WINDOW_NORMAL)
  cv2.imshow(image+"skin2 cr+cb",skin)
 
  dst = cv2.bitwise_and(img,img,mask=skin)
  cv2.namedWindow("cutout",cv2.WINDOW_NORMAL)
  cv2.imshow("cutout",dst)
 
  cv2.waitKey()

效果

4 HSV顏色空間H,S,V范圍篩選法

原理

還是轉(zhuǎn)換空間然后每個(gè)通道設(shè)置一個(gè)閾值綜合考慮,進(jìn)行二值化操作。

代碼

def hsv_detect(image):
  """
  :param image: 圖片路徑
  :return: None
  """
  img = cv2.imread(image,cv2.IMREAD_COLOR)
  hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
  (_h,_s,_v)= cv2.split(hsv)
  skin= np.zeros(_h.shape,dtype=np.uint8)
  (x,y)= _h.shape
 
  for i in range(0,x):
    for j in range(0,y):
      if(_h[i][j]>7) and (_h[i][j]<20) and (_s[i][j]>28) and (_s[i][j]<255) and (_v[i][j]>50 ) and (_v[i][j]<255):
        skin[i][j] = 255
      else:
        skin[i][j] = 0
  cv2.namedWindow(image, cv2.WINDOW_NORMAL)
  cv2.imshow(image, img)
  cv2.namedWindow(image + "hsv", cv2.WINDOW_NORMAL)
  cv2.imshow(image + "hsv", skin)
  dst = cv2.bitwise_and(img, img, mask=skin)
  cv2.namedWindow("cutout", cv2.WINDOW_NORMAL)
  cv2.imshow("cutout", dst)
  cv2.waitKey()

效果

示例

import cv2
import numpy as np
 
 
def ellipse_detect(image):
  """
  :param image: img path
  :return: None
  """
  img = cv2.imread(image, cv2.IMREAD_COLOR)
  skinCrCbHist = np.zeros((256, 256), dtype=np.uint8)
  cv2.ellipse(skinCrCbHist, (113, 155), (23, 15), 43, 0, 360, (255, 255, 255), -1)
 
  YCRCB = cv2.cvtColor(img, cv2.COLOR_BGR2YCR_CB)
  (y, cr, cb) = cv2.split(YCRCB)
  skin = np.zeros(cr.shape, dtype=np.uint8)
  (x, y) = cr.shape
  for i in range(0, x):
    for j in range(0, y):
      CR = YCRCB[i, j, 1]
      CB = YCRCB[i, j, 2]
      if skinCrCbHist[CR, CB] > 0:
        skin[i, j] = 255
  cv2.namedWindow(image, cv2.WINDOW_NORMAL)
  cv2.imshow(image, img)
  dst = cv2.bitwise_and(img, img, mask=skin)
  cv2.namedWindow("cutout", cv2.WINDOW_NORMAL)
  cv2.imshow("cutout", dst)
  cv2.waitKey()
 
 
 
if __name__ == '__main__':
  ellipse_detect('./test.png')

 到此這篇關(guān)于python opencv膚色檢測(cè)的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)opencv 膚色檢測(cè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python樣條插值的實(shí)現(xiàn)代碼

    python樣條插值的實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了python樣條插值的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • PyTorch搭建一維線性回歸模型(二)

    PyTorch搭建一維線性回歸模型(二)

    這篇文章主要為大家詳細(xì)介紹了PyTorch搭建一維線性回歸模型,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • python中Genarator函數(shù)用法分析

    python中Genarator函數(shù)用法分析

    這篇文章主要介紹了python中Genarator函數(shù)用法,實(shí)例分析了Genarator函數(shù)的使用原理與相關(guān)技巧,需要的朋友可以參考下
    2015-04-04
  • Python基本數(shù)據(jù)類型及內(nèi)置方法

    Python基本數(shù)據(jù)類型及內(nèi)置方法

    這篇文章主要介紹了Python基本數(shù)據(jù)類型及內(nèi)置方法,??數(shù)據(jù)類型是用來(lái)記錄事物狀態(tài)的,而事物的狀態(tài)是不斷變化的,下文圍繞主題展開相關(guān)內(nèi)容需要的小伙伴可以參考一下
    2022-04-04
  • python正則表達(dá)式對(duì)字符串的查找匹配

    python正則表達(dá)式對(duì)字符串的查找匹配

    正則表達(dá)式是一種文本模式,包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱為“元字符”),下面這篇文章主要給大家介紹了關(guān)于python正則表達(dá)式對(duì)字符串的查找匹配的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • Python數(shù)據(jù)結(jié)構(gòu)之哈夫曼樹定義與使用方法示例

    Python數(shù)據(jù)結(jié)構(gòu)之哈夫曼樹定義與使用方法示例

    這篇文章主要介紹了Python數(shù)據(jù)結(jié)構(gòu)之哈夫曼樹定義與使用方法,結(jié)合具體實(shí)例形式分析了Python哈夫曼樹的原理、定義及簡(jiǎn)單使用方法,需要的朋友可以參考下
    2018-04-04
  • Python使用Pillow添加水印

    Python使用Pillow添加水印

    這篇文章主要為大家詳細(xì)介紹了Python使用Pillow添加水印,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Python學(xué)習(xí)之迭代器的使用教程詳解

    Python學(xué)習(xí)之迭代器的使用教程詳解

    迭代器是一種對(duì)象,該對(duì)象包含值的可計(jì)數(shù)數(shù)字。從技術(shù)上講,在?Python?中,迭代器是實(shí)現(xiàn)迭代器協(xié)議的對(duì)象,它包含方法?iter()?和?next()。本文就來(lái)聊聊迭代器的具體使用吧
    2023-03-03
  • python異常中else的實(shí)例用法

    python異常中else的實(shí)例用法

    在本篇內(nèi)容里小編給大家分享的是一篇關(guān)于python異常中else的實(shí)例用法,有興趣的朋友們可以跟著學(xué)習(xí)下。
    2021-06-06
  • 使用Python中的greenlet包實(shí)現(xiàn)并發(fā)編程的入門教程

    使用Python中的greenlet包實(shí)現(xiàn)并發(fā)編程的入門教程

    這篇文章主要介紹了使用Python中的greenlet包實(shí)現(xiàn)并發(fā)編程的入門教程,Python由于GIL的存在并不能實(shí)現(xiàn)真正的多線程并發(fā),greenlet可以做到一個(gè)相對(duì)的替換方案,需要的朋友可以參考下
    2015-04-04

最新評(píng)論

达日县| 福泉市| 苏尼特左旗| 建德市| 闽侯县| 林西县| 阿勒泰市| 铜川市| 贵南县| 桃园市| 宁乡县| 新野县| 阿克| 增城市| 贵德县| 榆社县| 海伦市| 错那县| 弥渡县| 佛冈县| 新乡县| 叙永县| 潮安县| 仙居县| 淮安市| 定州市| 璧山县| 长乐市| 专栏| 精河县| 安化县| 古交市| 噶尔县| 绥芬河市| 竹北市| 东山县| 南郑县| 海宁市| 习水县| 高邑县| 界首市|