OpenCV图片之间的四则运算add multiply subtract divide

《OpenCV系列教程》
《深度学习-如何提高数据集质量》

项目位置:OpenCV-Sample
代码位置:43-OperationFixels.py

对像素进行四则运算最直接的就是对像素的放大和缩小。

加法乘法操作

add(src1, src2, dst=None, mask=None, dtype=None)
multiply(src1, src2, dst=None, scale=None, dtype=None)

如下是放大方块内的像素数值,图片排练顺序,原图、加法操作、乘法操作
OpenCV图片之间的四则运算add multiply subtract divide_第1张图片
可以看到,明显的乘法操作效果好。

减法除法操作

subtract(src1, src2, dst=None, mask=None, dtype=None)
divide(src1, src2, dst=None, scale=None, dtype=None)

如下是缩小方块内的像素数值,图片排练顺序,原图、减法操作、除法操作
OpenCV图片之间的四则运算add multiply subtract divide_第2张图片

还有一些操作就是图像之间的融合

两张图片进行减法、加法操作,乘法、除法还得看最终效果决定。
如下是两张图片的减法操作:
OpenCV图片之间的四则运算add multiply subtract divide_第3张图片
这样就进行了一个简单的融合。

代码:

import cv2 as cv
import numpy as np

img_down = cv.imread('./res/underexposed.jpg')
img_up = cv.imread('./res/Overexposed.jpg')

cv.imshow('Down', img_down)
cv.imshow('Up', img_up)

H, W = img_down.shape[:2]
print(H, W)
filter_up = np.ones_like(img_down)
filter_down = np.ones_like(img_up)

clip_h = int(H/3)
clip_w = int(W/3)

#进行相加操作
filter_up[clip_h:clip_h * 2, clip_w:clip_w * 2, :] = 100
img_add = cv.add(img_down, filter_up)# same  img + filt
cv.imshow('add', img_add)

#进行相乘操作
filter_up[clip_h:clip_h * 2, clip_w:clip_w * 2, :] = 3
img_mult = cv.multiply(img_down, filter_up) #same img * filt
cv.imshow('multiply', img_mult)

#进行减法操作
filter_down[clip_h:clip_h * 2, clip_w:clip_w * 2, :] = 100
img_sub = cv.subtract(img_up, filter_down) #same img - filt
cv.imshow('subtract', img_sub)

#进行除法操作
filter_down[clip_h:clip_h * 2, clip_w:clip_w * 2, :] = 2.5
img_divi = cv.divide(img_up, filter_down)
cv.imshow('divide', img_divi)

#两个图片进行融合处理
img_up = cv.resize(img_up, (W, H), interpolation=cv.INTER_CUBIC)
img_merge = img_up - img_down
img_merge[img_merge > img_up] = 0
cv.imshow('merge', img_merge)

while True:
    key = cv.waitKey(100)
    if key == 27:
        break
cv.destroyAllWindows()

你可能感兴趣的:(OpenCV)