python opencv3 grabcut前景檢測

來源:互聯網
上載者:User

標籤:載入   rgb   lib   聯合   模式   地區   之間   標籤   div   

git:https://github.com/linyi0604/Computer-Vision

 1 import numpy as np 2 import cv2 3 import matplotlib.pyplot as plt 4  5 # 讀入圖片 6 img = cv2.imread("../data/mm2.jpeg") 7 # 建立一個和載入映像一樣形狀的 填充為0的掩膜 8 mask = np.zeros(img.shape[:2], np.uint8) 9 10 # 建立以0填充的前景和背景模型11 bgdModel = np.zeros((1, 65), np.float64)12 fgdModel = np.zeros((1, 65), np.float64)13 14 # 定義一個矩形15 rect = (100, 50, 421, 378)16 17 cv2.grabCut(img, mask, rect, bgdModel, fgdModel, 5, cv2.GC_INIT_WITH_RECT)18 19 """20 cv2.grabCut()21 參數:22     img: 輸入映像23     mask: 蒙板映像,確定前景地區,背景地區,不確定地區,24         可以設定為cv2.GC_BGD,cv2.GC_FGD,cv2.GC_PR_BGD,cv2.GC_PR_FGD,25         也可以輸入0,1,2,326     rect: 包含前景的矩形 格式(x, y, w, h)27     bdgModel: 演算法內部使用的數組. 你只需要建立兩個大小為 (1,65),資料類型為 np.float64 的數組28     fgdModel: 演算法內部使用的數組. 你只需要建立兩個大小為 (1,65),資料類型為 np.float64 的數組29     iterCount: 演算法的迭代次數 30     mode: 可以設定為 cv2.GC_INIT_WITH_RECT 或 cv2.GC_INIT_WITH_MASK,也可以聯合使用。31         這是用來確定我們進行修改的方式,矩形模式或者掩模模式 32 33 演算法會修改掩模映像,在新的掩模映像中,34 所有的像素被分為四類:背景,前景,可能是背景/前景使用 4 個不同的標籤標記。35 然後我們來修改掩模映像,36 所有的 0 像素和 1 像素都被歸為 0(例如背景),所有的 1 像素和 3 像素都被歸為 1(前景)。37 我們最終的掩模映像就這樣準備好了。用它和輸入映像相乘就得到了分割好的映像38 39 原理:40     1 輸入矩形框,矩形框外部地區都是背景。內部一定包含前景。41     2 電腦對輸入映像進行初始化,標記前景和背景的像素。42     3 使用高斯混合模型(GMM)對前景和背景建模。43     4 根據輸入,GMM會學習並建立新的像素分布。44         對未知的像素(前景或背景不確定),根據他們與已知的分類像素關係進行分類。(類似聚類操作)45     5 這樣會根據像素的分布建立一幅圖,圖中節點是像素。46         除了像素點是節點以外,還有Source_node和Sink_node兩個節點。47         所有的前景映像都與Source_node相連。背景與Sink_node相連。48     6 像素是否串連到Source_node/end_node依賴於權值,49         這個權值由像素屬於同一類,也就是前景或者背景的機率來決定。50         如果像素的顏色有很大區別,那麼他們之間的權重就很小。51     7 使用mincut演算法對映像進行分割。52         它會根據最小代價方程對映像分成source_node和sink_node。53         代價方程是指裁剪所有邊上權重的和。54         裁剪完成後,所有串連到source_node的判定為前景,sink_node上的為背景。55 繼續此過程,直到分類收斂。56 57     58 59 """60 mask2 = np.where((mask == 2) | (mask == 0), 0, 1).astype("uint8")61 img = img*mask2[:, :, np.newaxis]62 63 plt.subplot(121), plt.imshow(img)64 plt.title("grabcut"), plt.xticks([]), plt.yticks([])65 plt.subplot(122), plt.imshow(cv2.cvtColor(cv2.imread("../data/mm2.jpeg"), cv2.COLOR_BGR2RGB))66 plt.title("original"), plt.xticks([]), plt.yticks([])67 plt.show()

 

python opencv3 grabcut前景檢測

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.