Pixellib語義分割-影像背景替換

wancy發表於2024-06-22

1.Pixellib

  Pixellib 是一個基於 TensorFlow 和 OpenCV 的深度學習庫,用於語義分割和例項分割任務,提供了強大的工具和庫來構建和訓練深度神經網路模型。Pixellib 支援多種主流深度學習模型,如 DeepLabV3、Mask R-CNN、YOLOv4、YOLOv5 和 Panoptic FPN 等

2. 安裝

  安裝tenforflow:pip3 install tensorflow-gpu或pip3 install tensorflow

  安裝Pixellib:pip3 install pixellib

3. 資源地址

  github官網地址: https://github.com/ayoolaolafenwa/PixelLib
  官方文件: https://pixellib.readthedocs.io/en/latest/

  模型權重下載地址: https://github.com/bonlime/keras-deeplab-v3-plus/releases

3.顏色背景替換

import cv2
from pixellib.tune_bg import alter_bg

change_bg = alter_bg()
change_bg.load_pascalvoc_model("deeplabv3_xception_tf_dim_ordering_tf_kernels.h5")
output = change_bg.color_bg("sample.jpeg", colors = (0, 128, 0))#將背景置為綠色
cv2.imwrite("img.jpg", output)
new_image = cv2.imread("img.jpg")
# 模糊讓邊緣更平滑
blurred_image = cv2.GaussianBlur(new_image, (5, 5), 0)
# 儲存最終輸出影像
cv2.imwrite("img_blur.jpg", blurred_image)

                                                   原圖 換背景顏色圖

4. 替換背景圖片

from pixellib.tune_bg import alter_bg
import cv2
# 建立 alter_bg 例項
change_bg = alter_bg()
# 載入預訓練模型
change_bg.load_pascalvoc_model("deeplabv3_xception_tf_dim_ordering_tf_kernels.h5")
# # 替換背景
output = change_bg.change_bg_img(f_image_path="sample.jpeg",b_image_path="bg.jpeg", output_image_name="new_img.jpg")
# 載入輸出影像
new_image = cv2.imread("new_img.jpg")
#模糊
blurred_image = cv2.GaussianBlur(new_image, (5, 5), 0)
# 儲存最終輸出影像
cv2.imwrite("final_output.jpg", blurred_image)

                                              原圖 換背景圖

  上面是網上找的圖,再測試一下手機拍的圖。

5. 虛化背景

from pixellib.tune_bg import alter_bg

# 建立 alter_bg 例項
change_bg = alter_bg()
# 載入預訓練模型
change_bg.load_pascalvoc_model("deeplabv3_xception_tf_dim_ordering_tf_kernels.h5")
# 替換背景
output=change_bg.change_bg_img(f_image_path="sample.jpeg",b_image_path="bg.jpeg",output_image_name="new_img.jpg",detect="person")
change_bg.blur_bg("final_output.jpg", extreme=True, detect="person", output_image_name="blur_img.jpg")

小結:對於color_bg函式,可以指定detect引數來獲取我們想要分割的目標,預設是模型獲取所有目標。如果目標很多,只想要獲取人物,可以detect="person'。

  不足或錯誤之處,歡迎指正與評論!

相關文章