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

python 使用OpenCV進行簡單的人像分割與合成

 更新時間:2021年02月02日 09:52:51   作者:tankee  
這篇文章主要介紹了python 使用OpenCV進行簡單的人像分割與合成的方法,幫助大家更好的利用python處理圖像,感興趣的朋友可以了解下

實現(xiàn)思路

通過背景建模的方法,對源圖像中的動態(tài)人物前景進行分割,再將目標圖像作為背景,進行合成操作,獲得一個可用的合成影像。

實現(xiàn)步驟如下。

使用BackgroundSubtractorMOG2進行背景分割

BackgroundSubtractorMOG2是一個以高斯混合模型為基礎的背景前景分割算法,

混合高斯模型

分布概率是K個高斯分布的和,每個高斯分布有屬于自己的 μμ 和 σσ 參數(shù),以及對應的權(quán)重參數(shù),權(quán)重值必須為正數(shù),所有權(quán)重的和必須等于1,以確保公式給出數(shù)值是合理的概率密度值。換句話說如果我們把該公式對應的輸入空間合并起來,結(jié)果將等于1。

回到原算法,它的一個特點是它為每一個像素選擇一個合適數(shù)目的高斯分布?;诟咚鼓P偷钠谕蜆藴什顏砼袛嗷旌细咚鼓P湍P椭械哪膫€高斯模型更有可能對應這個像素點,如果不符合就會被判定為前景。

使用人像識別填充面部信息

創(chuàng)建級聯(lián)分類器

face_cascade = cv2.CascadeClassifier()
face_cascade.load(
  '/usr/local/anaconda3/envs/OpenCV/lib/python3.8/site-packages/cv2/data/haarcascade_frontalface_default.xml')

使用OpenCV自帶的級聯(lián)分類器,加載OpenCV的基礎人像識別數(shù)據(jù)。

識別源圖像中的人像

faces = face_cascade.detectMultiScale(gray, 1.3, 5)

使用形態(tài)學填充分割出來的前景

# 形態(tài)學開運算去噪點
fgmask = cv2.morphologyEx(fgmask, cv2.MORPH_OPEN, kernel)
for i in range(15):
  fgmask = cv2.dilate(fgmask, kernel, iterations=1)

通過開操作去掉前景圖像數(shù)組中的噪點,然后重復進行膨脹,填充前景輪廓。

將人像與目標背景進行合成

def resolve(o_img, mask, faces):
  if len(faces) == 0:
    return
  (x, y, w, h) = faces[0]
  rgb_mask_front = cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR)
  rgb_mask_front = cv2.bitwise_not(rgb_mask_front)
  cv2.circle(rgb_mask_front, (int(x + w / 2), int(y + h / 2)), int((w + h) / 4), (0, 0, 0), thickness=-1)
  o_img = cv2.subtract(o_img, rgb_mask_front)
  return o_img

將分割出來的部分取反再與源圖像進行減操作,相當于用一個Mask從原圖中摳出一部分。

再與背景進行加操作

out = resolve(frame, fgmask, faces)
out = cv2.add(out, c_frame)

代碼實現(xiàn)

import numpy as np
import cv2
import os

# 經(jīng)典的測試視頻
camera = cv2.VideoCapture('./source/background_test2.avi')
cap = cv2.VideoCapture('./source/camera_test2.avi')
face_cascade = cv2.CascadeClassifier()
face_cascade.load(
   os.getcwd()+'/source/haarcascade_frontalface_default.xml')
# 形態(tài)學操作需要使用
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3))
# 創(chuàng)建混合高斯模型用于背景建模
fgbg = cv2.createBackgroundSubtractorMOG2(detectShadows=False)


def resolve(o_img, mask, faces):
  if len(faces) == 0:
    return
  (x, y, w, h) = faces[0]
  rgb_mask_front = cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR)
  rgb_mask_front = cv2.bitwise_not(rgb_mask_front)
  cv2.circle(rgb_mask_front, (int(x + w / 2), int(y + h / 2)), int((w + h) / 4), (0, 0, 0), thickness=-1)
  o_img = cv2.subtract(o_img, rgb_mask_front)
  return o_img


while True:
  ret, frame = cap.read()
  c_ret, c_frame = camera.read()
  gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

  fgmask = fgbg.apply(frame)
  # 形態(tài)學開運算去噪點
  fgmask = cv2.morphologyEx(fgmask, cv2.MORPH_OPEN, kernel)
  gray_camera = cv2.cvtColor(c_frame, cv2.COLOR_BGR2GRAY)

  for i in range(15):
    fgmask = cv2.dilate(fgmask, kernel, iterations=1)

  faces = face_cascade.detectMultiScale(gray, 1.3, 5)
  out = resolve(frame, fgmask, faces)
  out = cv2.add(out, c_frame)
  cv2.imshow('Result', out)
  cv2.imshow('Mask', fgmask)
  k = cv2.waitKey(150) & 0xff
  if k == 27:
    break
out.release()
camera.release()
cap.release()
cv2.destroyAllWindows()

以上就是python 使用OpenCV進行簡單的人像分割與合成的詳細內(nèi)容,更多關于python opencv人像分割與合成的資料請關注腳本之家其它相關文章!

相關文章

  • Django中cookie的基本使用方法示例

    Django中cookie的基本使用方法示例

    這篇文章主要給大家介紹了關于Django中cookie的基本使用的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧。
    2018-02-02
  • Python matplotlib繪制散點圖的實例代碼

    Python matplotlib繪制散點圖的實例代碼

    這篇文章主要給大家介紹了關于Python matplotlib繪制散點圖的相關資料,所謂散點圖就是反映兩組變量每個數(shù)據(jù)點的值,并且從散點圖可以看出它們之間的相關性,需要的朋友可以參考下
    2021-06-06
  • python算法題 鏈表反轉(zhuǎn)詳解

    python算法題 鏈表反轉(zhuǎn)詳解

    這篇文章主要介紹了python算法題 鏈表反轉(zhuǎn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • Python數(shù)據(jù)挖掘中常用的五種AutoEDA 工具總結(jié)

    Python數(shù)據(jù)挖掘中常用的五種AutoEDA 工具總結(jié)

    大家好,我們都知道在數(shù)據(jù)挖掘的過程中,數(shù)據(jù)探索性分析一直是非常耗時的一個環(huán)節(jié),但也是繞不開的一個環(huán)節(jié),本篇文章帶你盤點數(shù)據(jù)挖掘中常見的5種 AutoEDA 工具
    2021-11-11
  • 強烈推薦好用的python庫合集(全面總結(jié))

    強烈推薦好用的python庫合集(全面總結(jié))

    這篇文章主要為大家介紹了強烈推薦非常好用的python庫合集(全面總結(jié)),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • Python 制作自動化翻譯工具

    Python 制作自動化翻譯工具

    這篇文章主要介紹了Python 實現(xiàn)自動化翻譯和替換的腳本,幫助大家更好的理解和學習使用python,提高辦公效率感興趣的朋友可以了解下
    2021-04-04
  • python數(shù)據(jù)結(jié)構(gòu)之二叉樹的遍歷實例

    python數(shù)據(jù)結(jié)構(gòu)之二叉樹的遍歷實例

    這篇文章主要介紹了python數(shù)據(jù)結(jié)構(gòu)之二叉樹的遞歸遍歷實例,需要的朋友可以參考下
    2014-04-04
  • Python通過len函數(shù)返回對象長度

    Python通過len函數(shù)返回對象長度

    這篇文章主要介紹了Python通過len函數(shù)返回對象長度,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • Python 調(diào)用VC++的動態(tài)鏈接庫(DLL)

    Python 調(diào)用VC++的動態(tài)鏈接庫(DLL)

    Python下調(diào)用VC++的動態(tài)鏈接庫的腳本
    2008-09-09
  • pytorch中.numpy()、.item()、.cpu()、.detach()以及.data的使用方法

    pytorch中.numpy()、.item()、.cpu()、.detach()以及.data的使用方法

    這篇文章主要給大家介紹了關于pytorch中.numpy()、.item()、.cpu()、.detach()以及.data的使用方法,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-08-08

最新評論

萨迦县| 朝阳区| 无棣县| 宝清县| 湖口县| 东港市| 嘉义市| 土默特左旗| 明水县| 高邑县| 贵州省| 枣阳市| 滁州市| 白银市| 嘉鱼县| 克山县| 贺兰县| 毕节市| 临夏市| 富裕县| 陇川县| 普定县| 犍为县| 龙井市| 昆山市| 孝感市| 平乡县| 临安市| 凭祥市| 宜章县| 定日县| 东明县| 四川省| 咸宁市| 乌兰浩特市| 长白| 酒泉市| 沾益县| 澎湖县| 宝清县| 高碑店市|