OpenCV 完整例程16. 不同尺寸的图像加法

Posted Python小白进阶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV 完整例程16. 不同尺寸的图像加法相关的知识,希望对你有一定的参考价值。

16. 不同尺寸的图像加法

函数 cv2.add() 用于图像的加法运算, 对两张相同大小和类型的图像进行加法运算,或对一张图像与一个标量进行加法运算。

函数说明:

cv2.add(src1, src2 [, dst[, mask[, dtype]]) → dst

函数 cv2.addWeight() 用于图像的加权加法运算,对两张相同大小和类型的图像按权重相加,可以实现图像的叠加和混合。

函数说明:

cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]]) → dst 

注意事项:

  1. 使用函数 cv2.add()、cv2.addWeight() 对两张图片相加时,图片的大小和类型(通道数)必须相同。

  2. 对于不同尺寸的图像加法,将小图叠加到大图的指定位置,可以按扩展例程 1.25 处理。


扩展例程:1.25 不同尺寸的图像加法

    # 1.25 不同尺寸的图像加法
    imgL = cv2.imread("../images/imgB2.jpg")  # 读取大图
    imgS = cv2.imread("../images/logoCV.png")  # 读取小图 (LOGO)

    x,y = 300,50  # 叠放位置
    W1, H1 = imgL.shape[1::-1]  # 大图尺寸
    W2, H2 = imgS.shape[1::-1]  # 小图尺寸
    if (x + W2) > W1: x = W1 - W2  # 调整图像叠放位置,避免溢出
    if (y + H2) > H1: y = H1 - H2

    imgCrop = imgL[y:y + H2, x:x + W2]  # 裁剪大图,与小图 imgS 的大小相同
    imgAdd = cv2.add(imgCrop, imgS)  # cv2 加法,裁剪图与小图叠加
    alpha, beta, gamma = 0.2, 0.8, 0.0  # 加法权值
    imgAddW = cv2.addWeighted(imgCrop, alpha, imgS, beta, gamma)  # 加权加法,裁剪图与小图叠加

    imgAddM = np.array(imgL)
    imgAddM[y:y + H2, x:x + W2] = imgAddW  # 用叠加小图替换原图 imgL 的叠放位置

    cv2.imshow("imgAdd", imgAdd)
    cv2.imshow("imgAddW", imgAddW)
    cv2.imshow("imgAddM", imgAddM)
    cv2.waitKey(0)

需要说明的是,对不同尺寸的图像叠加可以有不同的理解和处理。本例程是将小图叠加到大图的指定位置,运行结果如下图所示。

以上是关于OpenCV 完整例程16. 不同尺寸的图像加法的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV 完整例程21. 图像的叠加

OpenCV 完整例程17. 两张图像的渐变切换

OpenCV 完整例程19. 图像的圆形遮罩

opencv图像处理基础操作之图像的加法和混合

OpenCV 完整例程31. 图像金字塔(cv2.pyrDown)

OpenCV 完整例程67. 空间域图像增强的综合应用