两张大小相等图片的运算(算数运算、逻辑运算)。

算术运算 加减乘除

相加:add()

相减:subtract()

相乘:divide()

相除:multiply()

原理就是:通过获取两张(一次只能是两张)个图片的同一个位置的色素值来实现运算。

运算的要求:两张图片的shape要一样。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
def add_demo(m1, m2):
dst = cv.add(m1, m2)
cv.imshow('add_demo', dst)


def sub_demo(m1, m2):
dst = cv.subtract(m1, m2)
cv.imshow('sub_demo', dst)


def div_demo(m1, m2):
dst = cv.divide(m2, m1)
cv.imshow('div_demo', dst)


def mul_demo(m1, m2):
dst = cv.multiply(m1, m2)
cv.imshow('mul_demo', dst)


img1 = cv.imread('LinuxLogo.jpg')
img2 = cv.imread('WindowsLogo.jpg')

cv.namedWindow('img1', cv.WINDOW_AUTOSIZE)
cv.imshow('img1', img1)
cv.imshow('img2', img2)

add_demo(img1, img2)
sub_demo(img1, img2)
div_demo(img1, img2)
mul_demo(img1, img2)

加减乘除运算

其他运算 均值、方差

均值、方差。

1
2
3
4
5
6
7
8
def other_demo(m1, m2):
# im1 = cv.mean(m1) # 求平均值,均值可以说明这个图像的主色调是什么
# im2 = cv.mean(m2)

im1, dev1 = cv.meanStdDev(m1) # 得到均值和方差
im2, dev2 = cv.meanStdDev(m2) # 方差表示图片之间的差异性(对比度),方差是一个小于某个值,可能图像是无效的
print('img1', im1, dev1)
print('img2', im2, dev2)

逻辑运算 与或非亦或

1
2
3
4
5
6
7
8
9
def logic_demo(m1, m2):
dst = cv.bitwise_and(m1, m2) # 与运算,做遮罩
cv.imshow('and', dst)
dst = cv.bitwise_or(m1, m2) # 或运算
cv.imshow('or', dst)
dst = cv.bitwise_not(m2) # 非操作,就是 255 - px
cv.imshow('not', dst)
dst = cv.bitwise_xor(m1, m2) # 亦或运算
cv.imshow('xor', dst)

逻辑运算