ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

OpenCV 函数学习14-图像与标量相加(cv2.add)

2021-11-07 14:59:24  阅读:171  来源: 互联网

标签:plt cv2 OpenCV add 图像 标量 img1 255


14. 图像与标量相加(cv2.add)

函数 cv2.add() 用于图像的加法运算。

函数说明:

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

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

对一张图像与一个标量相加时,则将图像所有像素的各通道值分别与标量的各通道值相加。

参数说明:

  • scr1, scr2:进行加法运算的图像,或一张图像与一个 numpy array 标量
  • dst:输出的图像,可选项,默认值为 None
  • mask:掩模图像,8位灰度格式;掩模图像数值为 0 的像素,输出图像对应像素的各通道值也为 0。可选项,默认值为 None
  • dtype:图像数组的深度,即每个像素值的位数,可选项
  • 返回值:dst,运算结果图像,ndarray 多维数组

注意事项:

  1. OpenCV 加法和 numpy 加法之间有区别:cv2.add() 是饱和运算(相加后如大于 255 则结果为 255),而 Numpy 加法是模运算。
  2. 使用 cv2.add() 函数对两张图片相加时,图片的大小和类型(通道数)必须相同。
  3. 使用 cv2.add() 函数对一张图像与一个标量相加,标量是指一个 1x3 的 numpy 数组,相加后图像整体发白。

基本例程:1.23 图像与标量相加

# 1.23 图像的加法 (与标量相加)
    img1 = cv2.imread("../images/imgB1.jpg")  # 读取彩色图像(BGR)
    img2 = cv2.imread("../images/imgB3.jpg")  # 读取彩色图像(BGR)

    Value = 100  # 常数
    # Scalar = np.array([[50., 100., 150.]])  # 标量
    Scalar = np.ones((1, 3), dtype="float") * Value  # 标量
    imgAddV = cv2.add(img1, Value)  # OpenCV 加法: 图像 + 常数
    imgAddS = cv2.add(img1, Scalar)  # OpenCV 加法: 图像 + 标量

    print("Shape of scalar", Scalar)
    for i in range(1, 6):
        x, y = i*10, i*10
        print("(x,y)={},{}, img1:{}, imgAddV:{}, imgAddS:{}"
              .format(x,y,img1[x,y],imgAddV[x,y],imgAddS[x,y]))

    plt.subplot(131), plt.title("1. img1"), plt.axis('off')
    plt.imshow(cv2.cvtColor(img1, cv2.COLOR_BGR2RGB))  # 显示 img1(RGB)
    plt.subplot(132), plt.title("2. img + constant"), plt.axis('off')
    plt.imshow(cv2.cvtColor(imgAddV, cv2.COLOR_BGR2RGB))  # 显示 imgAddV(RGB)
    plt.subplot(133), plt.title("3. img + scalar"), plt.axis('off')
    plt.imshow(cv2.cvtColor(imgAddS, cv2.COLOR_BGR2RGB))  # 显示 imgAddS(RGB)
    plt.show()

例程说明 1.23:

本例程运行结果如下。

Shape of scalar [[150. 150. 150.]]
(x,y)=10,10, img1:[ 9  9 69], imgAddV:[159   9  69], imgAddS:[159 159 219]
(x,y)=20,20, img1:[  3 252 255], imgAddV:[153 252 255], imgAddS:[153 255 255]
(x,y)=30,30, img1:[  1 255 254], imgAddV:[151 255 254], imgAddS:[151 255 255]
(x,y)=40,40, img1:[  1 255 254], imgAddV:[151 255 254], imgAddS:[151 255 255]
(x,y)=50,50, img1:[  1 255 255], imgAddV:[151 255 255], imgAddS:[151 255 255]
  • 注意 cv2.add() 对图像与标量相加时,“常数” 与 “标量” 的区别:
  • 将图像与一个常数 value 相加,只是将 B 通道即蓝色分量与常数相加,而 G、R 通道的数值不变,因此图像发蓝。
  • 将图像与一个标量 scalar 相加,“标量” 是指一个 1x3 的 numpy 数组,此时 B/G/R 通道分别与数组中对应的常数相加,因此图像发白。
  • 标量 numpy 数组的形式为:np.array([[c1, c2, c3]]),常数 c1,c2,c3 可以相同或不同。

在这里插入图片描述



标签:plt,cv2,OpenCV,add,图像,标量,img1,255
来源: https://blog.csdn.net/youcans/article/details/121191469

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有