python-opencv:圖像位運算

python-opencv:圖像位運算

1.cv2.add():

      函數功能:將兩個圖片進行加和,大於255的使用255計數,需注意兩輸入圖像image1和image2需要有相同的寬/高和通道數。

cv2.add(image1, image2) 

參數:
     1)img1:圖片對象1
     2)img2:圖片對象2
     3)mask:None(掩膜,一般用灰度圖做掩膜,img1和img2相加後,和掩膜與運算,從而達到掩蓋部分區域的目的;)
     4)dtype:-1

 

2.cv2.addWeighted():

      函數功能:將兩個圖片加權疊加,需注意兩輸入圖像image1和image2需要有相同的寬/高和通道數。

cv2.addWeighted() 
參數:
   1)img1:圖片對象1
   2)alpha:img1的權重
   3)img2:圖片對象2
   4)beta:img1的權重
   5)gamma:常量值,圖像相加後再加上常量值
   6)dtype:返回圖像的數據類型,默認爲-1,和img1一樣
    (img1*alpha+img2*beta+gamma)

 

3.cv2.btwise_and():

      函數功能:兩圖像按位與操作,兩個輸入圖像需要有相同的形狀。

      經常看到的result = cv2.btwise_and(img1, img1,mask)的操作相當於對img1l保留mask部分,其餘部分置0。

cv2.btwise_and(): 
參數:
    1)img1:圖片對象1
    2)img2:圖片對象2
    3)mask:掩膜

 

4.cv2.btwise_and():

      函數功能:兩圖像按位或操作,兩個輸入圖像需要有相同的形狀。

cv2.bitwise_or():
參數:
   1)img1:圖片對象1
   2)img2:圖片對象2
   3)mask:掩膜

 

5.cv2.btwise_xor():

      函數功能:異或運算,相同爲1,不同爲0。

cv2.bitwise_xor()
參數:
  1)img1:圖片對象1
  2)img2:圖片對象2
  3)mask:掩膜

 

 

6.cv2.btwise_not():

      函數功能:非運算,對輸入圖像按位取反。

cv2.bitwise_not(): 非運算
參數:
  1)img1:圖片對象1
  2)mask:掩膜

 

7.如何對不同尺寸的圖像進行疊加操作:

import cv2
import numpy as np
import matplotlib.pylab as plt

# 引入兩個圖片,第二個是logo
img1 = cv2.imread('data/2.jpg')
img2 = cv2.imread('data/maskFace.jpg')
plt.subplot(231),plt.imshow(img1)
plt.subplot(232),plt.imshow(img2)


# 設定圖1的roi,注意:對roi的操作就是對img1的操作
r1,c1,ch1 = img1.shape
r2,c2,ch2 = img2.shape
# roi確定了圖2所在圖1的位置
roi = img1[r1-r2:r1, c1-c2:c1 ]


# 圖2(logo)轉換爲灰度圖
gray = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)


# 對圖2閾值分割得到mask1(獲取0~100部分)
# 保留mask1部分的roi
ret, mask1 = cv2.threshold(gray, 100, 255, cv2.THRESH_BINARY_INV)
fg1 = cv2.bitwise_and(roi,roi,mask=mask1)
plt.subplot(233),plt.imshow(fg1)
plt.subplot(234),plt.imshow(mask1)


# 對圖2圖2閾值分割得到mask2(獲取100~255部分)
# 保留mask2部分的img2
ret, mask2 = cv2.threshold(gray, 100, 255, cv2.THRESH_BINARY)
# 保留img2的logo背景部分
fg2 = cv2.bitwise_and(img2,img2,mask = mask2)
plt.subplot(235),plt.imshow(fg2)


# 圖像疊加
roi[:] = cv2.add(fg1, fg2)
plt.subplot(236),plt.imshow(img1)

plt.show()
cv2.waitKey(0)
cv2.destroyAllWindows()

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章