opencv3.3.1+python3.6.3圖像上添加背景透明logo

參考文檔
https://docs.opencv.org/master/d0/d86/tutorial_py_image_arithmetics.html

說明
在添加logo之前,首先要對logo進行處理,把不需要的透明的背景轉變爲純黑色(0,0,0),便於後期的處理。

函數詳解

cv2.add()
就是直接把兩張圖片的像素值相加:dst=img1+img2
顯然,黑色的背景並不會改變原圖的形狀,但logo和背景圖重合的部分則會改變顏色。
這裏寫圖片描述

cv2.addWeighted():
按照兩幅圖的權重進行疊加:dst=α⋅img1+β⋅img2+γ
和上面的效果會有些類似。
這裏寫圖片描述

cv2.bitWise_and/or/xor/not()
這是將透明背景扣掉的蒙版處理方法,首先把logo轉化爲一個灰度圖,然後設定閾值將其轉化爲一個黑白蒙版,把背景去掉(注意:閾值的選取最好不要影響logo內部的圖像,不然會出現噪點),各函數的表象如下:
蒙版效果:
這裏寫圖片描述

蒙版區域互換的效果:

這裏寫圖片描述

把背景圖中rio區域內不覆蓋logo的地方找出來:
這裏寫圖片描述

把背景透明的logo蒙版出來
這裏寫圖片描述
兩者疊加:
這裏寫圖片描述
就可以得到背景透明的logo疊加處理了。

還有一種方法就是把logo圖片的背景和logo區別開來,只要是不同的色彩即可,然後採用遍歷的方法,凡是背景色彩的像素都用roi的像素,是logo前景的色彩就用logo的,這樣混合之後在賦值會原圖片,就可以完美實現logo的背景透明瞭。
這裏寫圖片描述

可以參考一下我的代碼:

import cv2
import numpy as np
import math

cv2.namedWindow("logo")  #定義一個窗口
frame=cv2.imread('girl.png') #捕獲圖像1
logo=cv2.imread('logo.jpg')
logo_gray=cv2.cvtColor(logo,cv2.COLOR_BGR2GRAY)
rows,cols,channels = logo.shape

dx,dy=120,150
roi=frame[dx:dx+cols,dy:dy+rows]
for i in range(cols):
    for j in range(rows):
        if (logo[i,j][0]+logo[i,j][1]+logo[i,j][2])<=20:roi[i,j]=roi[i,j]
        else:roi[i,j]=logo[i,j]
#roi=cv2.addWeighted(logo,0.5,roi,0.5,1)
#roi=cv2.add(logo,roi)
frame[dx:dx+cols,dy:dy+rows]=roi

cv2.imshow("logo",frame)#顯示輪廓

cv2.waitKey(0)
cv2.destroyAllWindows()
發佈了68 篇原創文章 · 獲贊 60 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章