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

python opencv膚色檢測的實現示例

 更新時間:2020年12月21日 14:14:32   作者:George593  
這篇文章主要介紹了python opencv膚色檢測的實現示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

1 橢圓膚色檢測模型

原理:將RGB圖像轉換到YCRCB空間,膚色像素點會聚集到一個橢圓區(qū)域。先定義一個橢圓模型,然后將每個RGB像素點轉換到YCRCB空間比對是否再橢圓區(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法閾值分割算法

原理

針對YCRCB中CR分量的處理,將RGB轉換為YCRCB,對CR通道單獨進行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范圍篩選法

 原理

類似于第二種方法,只不過是對CR和CB兩個通道綜合考慮

代碼

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范圍篩選法

原理

還是轉換空間然后每個通道設置一個閾值綜合考慮,進行二值化操作。

代碼

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')

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

相關文章

  • python樣條插值的實現代碼

    python樣條插值的實現代碼

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

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

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

    python中Genarator函數用法分析

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

    Python基本數據類型及內置方法

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

    python正則表達式對字符串的查找匹配

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

    Python數據結構之哈夫曼樹定義與使用方法示例

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

    Python使用Pillow添加水印

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

    Python學習之迭代器的使用教程詳解

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

    python異常中else的實例用法

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

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

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

最新評論

西峡县| 建瓯市| 西乌| 左权县| 互助| 榆中县| 唐山市| 久治县| 通州区| 饶阳县| 元谋县| 山阴县| 运城市| 偃师市| 彰武县| 邢台市| 页游| 德庆县| 宁河县| 禹城市| 承德市| 商南县| 绥江县| 合山市| 沂源县| 双牌县| 当雄县| 安泽县| 长宁区| 哈巴河县| 刚察县| 华安县| 信宜市| 安徽省| 临夏县| 北辰区| 房产| 浦江县| 澄城县| 卓资县| 梁山县|