国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:56日期:2022-06-28 15:33:28
實現思路

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

實現步驟如下。

使用BackgroundSubtractorMOG2進行背景分割

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

混合高斯模型

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

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

回到原算法,它的一個特點是它為每一個像素選擇一個合適數目的高斯分布。基于高斯模型的期望和標準差來判斷混合高斯模型模型中的哪個高斯模型更有可能對應這個像素點,如果不符合就會被判定為前景。

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

創建級聯分類器

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

使用OpenCV自帶的級聯分類器,加載OpenCV的基礎人像識別數據。

識別源圖像中的人像

faces = face_cascade.detectMultiScale(gray, 1.3, 5)使用形態學填充分割出來的前景

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

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

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

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)代碼實現

import numpy as npimport cv2import os# 經典的測試視頻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’)# 形態學操作需要使用kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3))# 創建混合高斯模型用于背景建模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) # 形態學開運算去噪點 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進行簡單的人像分割與合成的詳細內容,更多關于python opencv人像分割與合成的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 国产精品三级一区二区 | 欧美日韩亚洲一区二区三区在线观看 | 香蕉毛片a| 国内精品久久久久影院老司 | 国产午夜精品不卡观看 | 在线观看视频一区 | 91av观看 | 成人男女18免费o | 在线观看精品视频网站www | 一级做a爱过程免费视频麻豆 | 国产性做久久久久久 | 国产精品国产高清国产专区 | 久久国产精品一国产精品 | 久久91精品国产99久久yfo | 国产欧美日韩在线观看精品 | 国产伦精品一区二区三区无广告 | 国产成人精品一区二区不卡 | 欧美性色黄大片www 欧美性色黄大片一级毛片视频 | 女人张开双腿让男人桶完整 | 日韩在线视频不卡一区二区三区 | 久久88香港三级台湾三级中文 | 国产伦精品一区二区三区网站 | 欧美一级高清在线观看 | 日韩一级片在线观看 | 成人交性视频免费看 | 国产精品免费大片一区二区 | 精品 日韩 国产 欧美在线观看 | 欧美大尺度免费一级特黄 | 欧美超高清xoxoxoxo | 岛国大片在线播放免费 | 国产日韩在线播放 | 一级黄色录像片 | 国产日韩一区二区三区 | 日产日韩亚洲欧美综合搜索 | 日韩美女专区中文字幕 | 男人的天堂视频在线 | 国内精品久久精品 | 国产特黄1级毛片 | 亚洲欧美一区二区久久 | 全黄性高视频 | 亚洲第一免费视频 |