亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python 使用OpenCV進(jìn)行簡單的人像分割與合成

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

實(shí)現(xiàn)思路

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

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

使用BackgroundSubtractorMOG2進(jìn)行背景分割

BackgroundSubtractorMOG2是一個(gè)以高斯混合模型為基礎(chǔ)的背景前景分割算法,

混合高斯模型

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

回到原算法,它的一個(gè)特點(diǎn)是它為每一個(gè)像素選擇一個(gè)合適數(shù)目的高斯分布。基于高斯模型的期望和標(biāo)準(zhǔn)差來判斷混合高斯模型模型中的哪個(gè)高斯模型更有可能對應(yīng)這個(gè)像素點(diǎn),如果不符合就會被判定為前景。

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

創(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的基礎(chǔ)人像識別數(shù)據(jù)。

識別源圖像中的人像

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

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

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

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

將人像與目標(biāo)背景進(jìn)行合成

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

將分割出來的部分取反再與源圖像進(jìn)行減操作,相當(dāng)于用一個(gè)Mask從原圖中摳出一部分。

再與背景進(jìn)行加操作

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

代碼實(shí)現(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)學(xué)操作需要使用
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)學(xué)開運(yùn)算去噪點(diǎn)
  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進(jìn)行簡單的人像分割與合成的詳細(xì)內(nèi)容,更多關(guān)于python opencv人像分割與合成的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 用python畫一只可愛的皮卡丘實(shí)例

    用python畫一只可愛的皮卡丘實(shí)例

    今天小編就為大家分享一篇用python畫一只可愛的皮卡丘實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Python函數(shù)中的作用域規(guī)則詳解

    Python函數(shù)中的作用域規(guī)則詳解

    這篇文章主要為大家詳細(xì)介紹了Python的作用域規(guī)則,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • Python使用Virtualenv進(jìn)行虛擬環(huán)境管理的詳細(xì)步驟

    Python使用Virtualenv進(jìn)行虛擬環(huán)境管理的詳細(xì)步驟

    Virtualenv是一個(gè)Python環(huán)境管理工具,它允許開發(fā)者在不同的項(xiàng)目之間獨(dú)立創(chuàng)建和管理各自的Python環(huán)境,通過virtualenv,你可以為每個(gè)項(xiàng)目安裝特定版本的Python解釋器以及項(xiàng)目的依賴庫,本文給大家介紹了Python使用Virtualenv進(jìn)行虛擬環(huán)境管理的詳細(xì)步驟
    2024-09-09
  • 詳解centos7+django+python3+mysql+阿里云部署項(xiàng)目全流程

    詳解centos7+django+python3+mysql+阿里云部署項(xiàng)目全流程

    這篇文章主要介紹了詳解centos7+django+python3+mysql+阿里云部署項(xiàng)目全流程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • 深入理解Python變量與常量

    深入理解Python變量與常量

    下面小編就為大家?guī)硪黄钊肜斫釶ython變量與常量。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-06-06
  • Python利用Bokeh進(jìn)行數(shù)據(jù)可視化的教程分享

    Python利用Bokeh進(jìn)行數(shù)據(jù)可視化的教程分享

    Bokeh是Python中的數(shù)據(jù)可視化庫,提供高性能的交互式圖表和繪圖。本文將利用Bokeh繪制一些可視化圖表,文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-08-08
  • Django模板標(biāo)簽中url使用詳解(url跳轉(zhuǎn)到指定頁面)

    Django模板標(biāo)簽中url使用詳解(url跳轉(zhuǎn)到指定頁面)

    這篇文章主要介紹了Django模板標(biāo)簽中url使用詳解(url跳轉(zhuǎn)到指定頁面),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 7個(gè)關(guān)于Python的經(jīng)典基礎(chǔ)案例

    7個(gè)關(guān)于Python的經(jīng)典基礎(chǔ)案例

    這篇文章主要給大家分享 7個(gè)關(guān)于Python的經(jīng)典基礎(chǔ)案例,列表排序、調(diào)換字典鍵值、刪除列表中的重復(fù)元素、輸出質(zhì)數(shù)、判斷是一年中第幾天、猜數(shù)字、進(jìn)制轉(zhuǎn)換;,需要的朋友可以參考一下
    2021-11-11
  • node.js獲取參數(shù)的常用方法(總結(jié))

    node.js獲取參數(shù)的常用方法(總結(jié))

    下面小編就為大家?guī)硪黄猲ode.js獲取參數(shù)的常用方法(總結(jié))。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • 將python打包后的exe還原成py

    將python打包后的exe還原成py

    這篇文章主要介紹了將python打包后的exe還原成py,利用pyinstxtractor.py?拆包(解壓)工具,將exe文件解壓成一個(gè)文件夾<BR>uncompyle6?pyc反編譯工具,需要的朋友可以參考一下
    2022-01-01

最新評論