亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

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

瀏覽:30日期:2022-06-28 15:33:28
實(shí)現(xiàn)思路

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

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

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

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

混合高斯模型

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

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

回到原算法,它的一個(gè)特點(diǎn)是它為每一個(gè)像素選擇一個(gè)合適數(shù)目的高斯分布?;诟咚鼓P偷钠谕蜆?biāo)準(zhǔn)差來(lái)判斷混合高斯模型模型中的哪個(gè)高斯模型更有可能對(duì)應(yīng)這個(gè)像素點(diǎn),如果不符合就會(huì)被判定為前景。

使用人像識(shí)別填充面部信息

創(chuàng)建級(jí)聯(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自帶的級(jí)聯(lián)分類器,加載OpenCV的基礎(chǔ)人像識(shí)別數(shù)據(jù)。

識(shí)別源圖像中的人像

faces = face_cascade.detectMultiScale(gray, 1.3, 5)使用形態(tài)學(xué)填充分割出來(lái)的前景

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

通過(guò)開(kāi)操作去掉前景圖像數(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

將分割出來(lái)的部分取反再與源圖像進(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 npimport cv2import os# 經(jīng)典的測(cè)試視頻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_imgwhile 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é)開(kāi)運(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: breakout.release()camera.release()cap.release()cv2.destroyAllWindows()

以上就是python 使用OpenCV進(jìn)行簡(jiǎn)單的人像分割與合成的詳細(xì)內(nèi)容,更多關(guān)于python opencv人像分割與合成的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 国产小视频在线观看免费 | 亚洲自偷自拍另类12p | 一区二区三区视频在线播放 | 久久久久久亚洲精品 | 草草在线免费视频 | 久久精品国产一区二区三区日韩 | 91久久国产成人免费观看资源 | 色的综合 | 一区二区三区四区精品 | 亚洲国产精品一区二区久久hs | 亚洲v欧美v日韩v国产v | 亚洲 欧美 日韩中文字幕一区二区 | 最新在线鲁丝片eeuss第1页 | 久久er国产精品免费观看8 | 国产成人禁片免费观看 | 亚洲国产日韩在线成人蜜芽 | 亚洲美女福利视频在线 | 亚洲 中文 欧美 日韩 在线人 | 欧美综合亚洲图片综合区 | 日日夜夜噜 | 99久久国语露脸精品国产 | 97国产在线播放 | 成人精品国产亚洲欧洲 | 男人j桶进女人p无遮挡动态图二三 | 丰满美女福利视频在线播放 | 久久综合精品视频 | 国产日本特黄特色大片免费视频 | 成人一区二区免费中文字幕 | 最新国产你懂的在线网址 | 99草在线视频| 青青青青操 | 黄色a级片在线观看 | 精品视频在线播放 | 毛片线看免费观看 | 在线精品视频免费观看 | 色优久久| 毛片一区 | 亚洲福利午夜 | 九九黄色| 欧美日韩乱码毛片免费观看 | 久久婷婷成人综合色 |