import cv2
import numpy as np
x = np.uint8([250])
y = np.uint8([10])
cv2.add(x,y) # 250+10 = 260 => 255
array([[260.], [ 0.], [ 0.], [ 0.]])
x+y # 250+10 = 260 % 256 = 4
array([4], dtype=uint8)
当添加两张图片时,它会更明显。OpenCV函数将提供更好的结果。所以最好还是坚持使用OpenCV函数。
图像融合
这也是图像添加,但对图像赋予了不同的权重,使其给人一种混合或透明的感觉。图像按照以下方程式添加:
$$g(x) = (1 - \alpha)f_{0}(x) + \alpha f_{1}(x)$$
通过从 $0 \rightarrow 1$B 更改为 $\alpha$ , 可以在一个图像到另一个图像之间进行很酷的转换。
在这里把两张图像融合在一起。第一图像被赋予0.7的权重,第二图像被赋予0.3的权重,
cv2.addWeighted()
在图像上应用以下方程式:
$$dst = \alpha \cdot img1 + \beta \cdot img2 + \gamma$$
这里 $\gamma$ 取零。
img1 = cv2.imread('/data/cvdata/ml.png')
img2 = cv2.imread('/data/cvdata/opencv-logo.png')
import cv2 as cv
img1 = cv.imread('/data/cvdata/ml.png')
img2 = cv.imread('/data/cvdata/opencv-logo.png')
img1.shape
(380, 308, 3)
img2.shape
(739, 600, 3)
dst = cv.addWeighted(img1,0.3,img1,0.3,0)
%matplotlib inline
import matplotlib.pyplot as plt
plt.imshow(dst)
<matplotlib.image.AxesImage at 0x7f9282c2c500>
# dst = cv2.addWeighted(img1,0.3,img2,0.3,8)
# plt.imshow(dst)
# cv2.imshow('dst',dst)
# cv2.waitKey(0)
# cv2.destroyAllWindows()
# Load two images
# img1 = cv.imread('messi5.jpg')
# img2 = cv.imread('opencv-logo-white.png')
img1 = cv2.imread('/data/cvdata/messi5.jpg')
img2 = cv2.imread('/data/cvdata/opencv-logo-white.png')
# I want to put logo on top-left corner, So I create a ROI
rows,cols,channels = img2.shape
roi = img1[0:rows, 0:cols ]
# Now create a mask of logo and create its inverse mask also
img2gray = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(img2gray, 10, 255, cv2.THRESH_BINARY)
mask_inv = cv2.bitwise_not(mask)
# Now black-out the area of logo in ROI
img1_bg = cv2.bitwise_and(roi,roi,mask = mask_inv)
# Take only region of logo from logo image.
img2_fg = cv2.bitwise_and(img2,img2,mask = mask)
# Put logo in ROI and modify the main image
dst = cv2.add(img1_bg,img2_fg)
img1[0:rows, 0:cols ] = dst
plt.imshow(img1)
<matplotlib.image.AxesImage at 0x7f9282a62ba0>
cv2.imwrite('xx_a.jpg', img1)
True
from IPython.display import Image
Image('/data/cvdata/opencv-logo-white.png')
# cv2.imshow('res',img1)
# cv2.waitKey(0)
# cv2.destroyAllWindows()