opencv python掩膜操作

2022-03-19 06:47:05 字數 1554 閱讀 3801

時我們需要給一張新增logo,例如下圖這樣

掩膜操作思路它的思想是:

1.1 先將彩色影象轉換為灰度圖,然後利於閾值將影象二值化,變成非黑即白的形式,這樣logo的蒙版就做好來了(學過ps的人應該很容易理解);

1.2 蒙版中黑色的區域表示刪除掉該區域畫素,白色表示保留該區域畫素。黑色是0,白色是255;

1.3 所以利用二值化得到的蒙版(掩膜)是剔除logo區域的。反之,是用來提出logo上的多餘區域的;

1.4 如何剔除掉小姐姐**中的logo區和logo上的空白區域呢,用cv2.bitwise_and方法。因為0(黑色)與非0數and後為0,這樣就可以把該區域剔除啦;

1.5 最後,將logo補到小姐姐**上就可以了。

完整**

rows, cols, channels = logo.shape # 獲取影象2的屬性

roi = img1[0:rows, 0:cols] # 選擇roi範圍

logo2gray = cv2.cvtcolor(logo, cv2.color_bgr2gray) # 轉換為灰度影象

ret, mask = cv2.threshold(logo2gray, 175, 255, cv2.thresh_binary) # 設定閾值,大於175的置為255,小於175的置為0 logo黑色

mask_inv = cv2.bitwise_not(mask) # 非運算 logo白色

img1_bg = cv2.bitwise_and(roi, roi, mask=mask) # 刪除了roi中的logo區域(mask的logo為黑色,故and後該區域被捨去)---》上圖中的圖一

dst = cv2.add(img1_bg, logo_fg) # 兩個像插銷一樣,乙個被鏤空,乙個被保留,兩者相加,剛剛好

img1[0:rows, 0:cols] = dst # 將貼圖後的區域圖,覆蓋到原圖

cv2.imshow('res', img1)

cv2.waitkey(0)

cv2.destroyallwindows()

可能的報錯資訊

3.1 尺寸不一致導致

報錯如下:

person_ = cv2.bitwise_and(roi, roi, mask=mask)

原因:roi和mask的尺寸(長和寬)不一致導致的,比如img.shape=(800,600),roi擷取img一部分是,可能超出原本的大小,比如roi=img[0:610,0:610],roi.shape實際等於(610,600),造成與mask.shape=(610,610)不一致,從而報錯

注意:roi是rgb,mask是二值圖,通道本身就不等,我們進要求長和寬一致即可

opencv python掩膜操作

時我們需要給一張新增logo,例如下圖這樣 掩膜操作思路它的思想是 1.1 先將彩色影象轉換為灰度圖,然後利於閾值將影象二值化,變成非黑即白的形式,這樣logo的蒙版就做好來了 學過ps的人應該很容易理解 1.2 蒙版中黑色的區域表示刪除掉該區域畫素,白色表示保留該區域畫素。黑色是0,白色是255 ...

OpenCV學習 掩膜

影象掩膜,用選定的影象 圖形或物體,對處理的影象 全部或區域性 進行遮擋,來控制影象處理的區域或處理過程。掩膜是一種影象濾鏡的模板,實用掩膜經常處理的是遙感影象。當提取道路或者河流,或者房屋時,通過乙個n n的矩陣來對影象進行畫素過濾,然後將我們需要的地物或者標誌突出顯示出來。這個矩陣就是一種掩膜。...

opencv 掩膜操作

saturate cast函式保證運算後全部歸一化在0 255之間,注意上面row,col的移動範圍是很有講究的,的四個邊緣行因為沒有完整的上下左右所以省略,然而在實際應用掩膜操作時候並不用到自己這麼複雜的寫 opencv中提供了乙個filter2d函式。mat kernel mat 3,3 0,1...