日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【课题总结】OpenCV 抠图项目实战(4)固定阈值抠图

發布時間:2025/3/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【课题总结】OpenCV 抠图项目实战(4)固定阈值抠图 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python 小白的課題報告—OpenCV 摳圖項目實戰(4)固定閾值摳圖

本系列是 Python 小白的課題作業《基于OpenCV 的圖像分割和摳圖》。
需要說明的是,本系列并不能算是 OpenCV 的摳圖項目教程,只是以此為主題的課題報告。其中包括了一個較為完整的 PyQt 項目。

歡迎關注『Python 小白的項目實戰 @ youcans』 原創作品
Python 小白的課題報告—OpenCV 摳圖項目實戰(1)目錄摘要
Python 小白的課題報告—OpenCV 摳圖項目實戰(2)摳圖緒論
Python 小白的課題報告—OpenCV 摳圖項目實戰(3)摳圖綜述
Python 小白的課題報告—OpenCV 摳圖項目實戰(4)固定閾值摳圖
Python 小白的課題報告—OpenCV 摳圖項目實戰(5)自適應閾值摳圖
Python 小白的課題報告—OpenCV 摳圖項目實戰(6)色彩范圍摳圖
Python 小白的課題報告—OpenCV 摳圖項目實戰(7)邊緣檢測
Python 小白的課題報告—OpenCV 摳圖項目實戰(8)圖像輪廓
Python 小白的課題報告—OpenCV 摳圖項目實戰(9)評價指標
Python 小白的課題報告—OpenCV 摳圖項目實戰(10)PyQt5 使用
Python 小白的課題報告—OpenCV 摳圖項目實戰(11)算法實驗平臺
Python 小白的課題報告—OpenCV 摳圖項目實戰(12)源程序代碼


第三章 閾值摳圖

閾值處理方法直觀簡單,是一種基本的圖像分割方法。

根據圖像的整體或部分信息適當選擇閾值,像素值高于閾值時設為1/255,低于閾值時設為0,以此將圖像中感興趣的區域篩選出來生成掩模,再與原圖像合成即可得到摳圖圖像。

由于待處理圖像的灰度級數與其灰度直方圖是不確定的,對于不同的圖像、不同的目標前景,需要選取適當的閾值處理方法進行圖像分割。本章采用固定閾值、自適應閾值與色彩范圍三種方法進行圖像摳圖處理。


3.1 固定閾值摳圖

藍屏摳圖問題泛指已知背景顏色的單一背景顏色圖像摳圖,廣泛應用于證件拍照、影視制作。由于背景顏色是確定已知的,可以使用固定閾值方法進行圖像摳圖和背景顏色更換。

固定閾值摳圖方法先將彩色圖像轉化為灰度圖像,再基于適當的顏色閾值對圖像進行閾值處理生成二值化掩模遮罩圖像。將掩模遮罩與原始圖像合成就得到摳圖圖像,將掩模遮罩與新的背景圖片合成就可以更換圖像背景。

固定閾值處理方法的閾值,可由人工經驗選擇或基于圖像直方圖進行選擇。對于藍屏摳圖問題,通常使用固定閾值處理方法就可以獲得較好的結果。

OpenCV 提供了函數 cv.threshold()實現圖像的閾值處理。

函數說明:

cv.threshold(src, thresh, maxval, type[, dst]) → ret, dst

函數 threshold() 將灰度圖像轉換為二值圖像(Binarization),即圖像完全由像素 0 和 255 構成,呈現出只有黑白兩色的視覺效果,突出圖片的輪廓。

該方法通過固定閾值 thresh 處理圖像,也稱固定閾值處理方法。

參數說明:

  • scr:進行閾值處理的灰度圖像
  • thresh:閾值,取值范圍 0~255
  • maxval:填充色,取值范圍 0~255,一般取 255
  • type:閾值類型
    • cv2.THRESH_BINARY:小于閾值的像素置 0,大于閾值的像素置 maxval;
    • cv2.THRESH_BINARY_INV:小于閾值的像素置 maxval,大于閾值的像素置 0;
    • cv2.THRESH_TRUNC:小于閾值的像素不變(保持原值),大于閾值的像素置閾值thresh;
    • cv2.THRESH_TOZERO:小于閾值的像素置 0,大于閾值時不變(保持原值)
    • cv2.THRESH_TOZERO_INV:大于閾值的像素置 0,小于閾值時不變(保持原值)
    • cv2.THRESH_OTSU:使用 OTSU 算法選擇閾值
  • dst:返回二值化的灰度圖像
  • ret:返回二值化的閾值

使用固定閾值進行圖像摳圖的基本程序如下:

# MattingThresh.py # Copyright 2021 youcans, XUPTy # Crated:2021-12-10 # 1. 讀取原始圖像 imgOri = cv2.imread("../images/lady983Green.jpg") # 讀取原始圖像 width, height, channels = imgOri.shape# 2. 從原始圖像提取綠色通道 imgGray = cv2.cvtColor(imgOri, cv2.COLOR_BGR2GRAY) # 彩色圖像轉換為灰度圖像 imgGreen = imgOri[:,:,1] # imgGreen 為 綠色通道的 色彩強度圖 (注意不是原圖的灰度轉換結果) print(imgOri.shape, imgGray.shape, imgGreen.shape)# 3. 綠色通道轉換為二值圖像,生成遮罩 Mask、逆遮罩 MaskInv # 如果背景不是綠屏而是其它顏色,可以采用對應的顏色通道進行閾值處理 (不宜基于灰度圖像進行固定閾值處理,性能差異很大) colorThresh = 220 # 綠屏背景的顏色閾值 (注意研究閾值的影響) ret, binary = cv2.threshold(imgGreen, colorThresh, 255, cv2.THRESH_BINARY) # 轉換為二值圖像,生成遮罩,摳圖區域黑色遮蓋 binaryInv = cv2.bitwise_not(binary) # 按位非(黑白轉置),生成逆遮罩,摳圖區域白色開窗,摳圖以外區域黑色# 4. 用遮罩進行摳圖和更換背景 # 生成摳圖圖像 (前景保留,背景黑色) imgMatte = cv2.bitwise_and(imgOri, imgOri, mask=binaryInv) # 生成摳圖前景,標準摳圖以外的逆遮罩區域輸出黑色# 將背景顏色更換為紅色: 修改逆遮罩 (摳圖以外區域黑色) imgReplace = imgOri.copy() imgReplace[binaryInv==0] = [0,0,255] # 黑色區域(0/0/0)修改為紅色(BGR:0/0/255) plt.figure(figsize=(12,8)) plt.subplot(231), plt.imshow(cv2.cvtColor(imgOri, cv2.COLOR_BGR2RGB)), plt.title("Origin image"), plt.axis('off' plt.subplot(232), plt.imshow(imgGray, cmap='gray'), plt.title("Gray image"), plt.axis('off') plt.subplot(233), plt.imshow(imgGreen, cmap='gray'), plt.title("Green channel level"), plt.axis('off') plt.subplot(234), plt.imshow(binaryInv, cmap='gray'), plt.title("inv-binary mask"), plt.axis('off') plt.subplot(235), plt.imshow(cv2.cvtColor(imgMatte, cv2.COLOR_BGR2RGB)), plt.title("Matting Image"), plt.axis('off') plt.subplot(236), plt.imshow(cv2.cvtColor(imgReplace, cv2.COLOR_BGR2RGB)), plt.title("BgColor changed"), plt.axis('off') plt.tight_layout() plt.show()

使用固定閾值方法對單色背景圖像摳圖的結果如圖3.1~圖3.3所示。

圖中:inv-binary mask為生成的掩膜圖像,Matting Image為生成的目標前景圖像,BgColor changed為合成的摳圖圖像。

需要說明的是,圖中的結果并不是將原始圖像轉換為灰度圖像進行閾值處理,而是提取原始圖像的綠色通道(imaGreen)處理的結果。由于原始圖像的背景就是綠色,使用圖像綠色通道進行閾值處理,其性能比灰度圖像得到了顯著提高。

(1)使用固定閾值方法對單色背景圖像摳圖,可以取得比較滿意的結果;
(2)閾值設置對藍屏摳圖的性能影響較大,圖3.1~圖3.3分別是閾值設置為220、230、245時的實驗結果。

由以上三組圖片對比可以看到,閾值較大時的掩膜圖像較為精確完整,而閾值降低后的掩膜圖像質量降低。

固定閾值方法對于藍色/綠色/紅色背景的圖像摳圖的性能較好,但對于自然背景圖像處理比較困難。



圖3.1 固定閾值摳圖法(閾值=245)



圖3.2 固定閾值摳圖法(閾值=230)


圖3.3 固定閾值摳圖法(閾值=220)

【本節完】


版權聲明:

歡迎關注『Python 小白的項目實戰 @ youcans』 原創作品

原創作品,轉載必須標注原文鏈接:https://blog.csdn.net/youcans/article/details/122306621

Copyright 2022 youcans, XUPT

Crated:2022-01-05


歡迎關注『Python 小白從零開始 PyQt5 項目實戰 @ Youcans』系列,持續更新中
Python 小白的課題報告—OpenCV 摳圖項目實戰(1)目錄摘要
Python 小白的課題報告—OpenCV 摳圖項目實戰(2)摳圖緒論
Python 小白的課題報告—OpenCV 摳圖項目實戰(3)摳圖綜述
Python 小白的課題報告—OpenCV 摳圖項目實戰(4)固定閾值摳圖
Python 小白的課題報告—OpenCV 摳圖項目實戰(5)自適應閾值摳圖
Python 小白的課題報告—OpenCV 摳圖項目實戰(6)色彩范圍摳圖
Python 小白的課題報告—OpenCV 摳圖項目實戰(7)邊緣檢測
Python 小白的課題報告—OpenCV 摳圖項目實戰(8)圖像輪廓
Python 小白的課題報告—OpenCV 摳圖項目實戰(9)評價指標
Python 小白的課題報告—OpenCV 摳圖項目實戰(10)PyQt5 使用
Python 小白的課題報告—OpenCV 摳圖項目實戰(11)算法實驗平臺
Python 小白的課題報告—OpenCV 摳圖項目實戰(12)源程序代碼

總結

以上是生活随笔為你收集整理的【课题总结】OpenCV 抠图项目实战(4)固定阈值抠图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。