OpenCV-Python教程:圖像的乘法運算(multiply)


原文鏈接:http://www.juzicode.com/archives/6052

返回Opencv-Python教程

1、圖像乘法multiply()

multiply()用法:

dst=cv2.multiply(src1, src2[, dst[, scale[, dtype]]]),src1和src2為圖像對象,可選參數scale為放大倍數。結果dst=saturate(scale*src1*src2)

multiply()遵循飽和運算規則,比如uint8類型的數據如果超過255會被截斷到255。下面的例子讀入lena.jpg和opencv-logo.png后進行相乘:

import cv2
print('VX公眾號: 桔子code / juzicode.com')
print('cv2.__version__:',cv2.__version__)

img = cv2.imread('..\\lena.jpg')[0:512,0:512] #截取部分,保證大小一致
img2 = cv2.imread('..\\opencv-logo.png' )[0:512,0:512]

print('multiply(img,img2):')
img_ret = cv2.multiply(img,img2)
print('img[161,199]:',img[161,199])
print('img2[161,199]:',img2[161,199])
print('img_ret[161,199]:',img_ret[161,199])

print('img[100,200]:',img[100,200])
print('img2[100,200]:',img2[100,200])
print('img_ret[100,200]:',img_ret[100,200])

cv2.imshow('multiply(img,img2)',img_ret)
cv2.waitKey(0)

運行結果:

VX公眾號: 桔子code / juzicode.com
cv2.__version__: 4.5.2
multiply(img,img2):
img[161,199]: [109 105 201]
img2[161,199]: [  0   0 255]
img_ret[161,199]: [  0   0 255]
img[100,200]: [118 119 209]
img2[100,200]: [  0   0 255]
img_ret[100,200]: [  0   0 255]

 

從圖像學意義上看,因為opencv-logo.png的每個像素要么是0要么是255,用multiply()計算它和其他的圖像相乘得到的結果也是0或者255,所以最后的圖像和opencv-logo.png一樣。

 

2、符號乘法*

符號乘法實際就是numpy數組的乘法,和用+/-做numpy加減法一樣,在數值類型表示范圍的上限加1取模,比如uint8類型的數據對256取模。

import cv2
print('VX公眾號: 桔子code / juzicode.com')
print('cv2.__version__:',cv2.__version__)

img = cv2.imread('..\\lena.jpg')[0:512,0:512] #截取部分,保證大小一致
img2 = cv2.imread('..\\opencv-logo.png' )[0:512,0:512]

print('img*img2:')
img_ret = img*img2
print('img[161,199]:',img[161,199])
print('img2[161,199]:',img2[161,199])
print('img_ret[161,199]:',img_ret[161,199])

print('img[100,200]:',img[100,200])
print('img2[100,200]:',img2[100,200])
print('img_ret[100,200]:',img_ret[100,200])

cv2.imshow('img*img2',img_ret)
cv2.waitKey(0)

運行結果:

VX公眾號: 桔子code / juzicode.com
cv2.__version__: 4.5.2
img*img2:
img[161,199]: [109 105 201]
img2[161,199]: [  0   0 255]
img_ret[161,199]: [ 0  0 55]
img[100,200]: [118 119 209]
img2[100,200]: [  0   0 255]
img_ret[100,200]: [ 0  0 47]

 

小結:圖像的乘法運算multiply()和加減法運算add()、subtract()一樣也遵守“飽和運算”規則,最終的計算結果在特定的數據類型表示范圍內截斷。符號乘法實際就是numpy數組的乘法,在表示范圍的上限加1取模。

 

擴展閱讀:

  1. OpenCV-Python教程


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM