图像加法运算
import cv2
import numpy as np
cat = cv2.imread('./cat.jpeg')
dog = cv2.imread('./dog.jpeg')
读取猫和狗的图片。
print(cat.shape)
print(dog.shape)
输出二者的数组的形状。
(480, 640, 3)
(360, 499, 3)
发现猫的图片长宽不等于狗的图片,进行相加操作,必须试长宽相等,同时维度相同。
new_cat = cat[0:360, 0:499]
使用python的切片操作,使得二者图片长宽相等。注意切片操作区间是左闭右开,故0~359与0~499。
print(new_cat.shape)
(360, 499, 3)
长宽相等。
new_img = cv2.add(dog, new_cat)
cv2.imshow('new_img', new_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
print(new_img[0:3, 0:3])
[[[255 255 255]
[255 255 255]
[255 255 255]]
[[255 255 255]
[255 255 255]
[255 255 255]]
[[255 255 255]
[255 255 255]
[255 255 255]]]
可以发现通过cv2的加法是有截断功能。
new_img[0:3, 0:3] += 100
print(new_img[0:3, 0:3])
直接做加法。
[[[99 99 99]
[99 99 99]
[99 99 99]]
[[99 99 99]
[99 99 99]
[99 99 99]]
[[99 99 99]
[99 99 99]
[99 99 99]]]
是没有截断功能,由于元素type为uint8,故加到99.
其余运算意义不大
减法 subtract, 对应位置的元素相减, 减完小于0, 统一变成0
new_img = cv2.subtract(new_cat, dog)
乘法 multiply
new_img = cv2.multiply(new_cat, dog)
除 divide
new_img = cv2.divide(new_cat, dog)
图像融合
# 图像的融合
# 不是简单的加法了. 相当于拿图片做了线性运算. new_img = img1 * w1 + img2 * w2 + bias
import cv2
import numpy as np
# 读取图片
cat = cv2.imread('./cat.jpeg')
dog = cv2.imread('./dog.jpeg')
new_cat = cat[0:360, :499]
new_img = cv2.addWeighted(new_cat, 0.5, dog, 0.5, 0)
cv2.imshow('new_img', new_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
图像融合不再是简单的相加。添加了权重同时加上了偏置。