opencv-python图像处理学习随笔:图像和标量ADD相加中的标量和图像通道数相同元素数量理解

☞ ░ 前往老猿Python博文目录

关于图像和标量相加函数add的说明中有如下一段话:

在这里插入图片描述
其中标黄色部分说明图像和标量相加处理时,其中一句英文说明是:

Sum of an array and a scalar when src2 is constructed from Scalar or has the same number of elements as src1.channels()

老猿翻译理解为:
当src2是标量或与src1通道数具有相同数量的元素时(如元组或列表对象),将图像数组和标量相加。

其中针对“与src1通道数具有相同数量的元素”这句话老猿反复进行了测试,发现其实这句说法有问题,无论src1通道数是BGR三通道还是BGRA四通道,实际上在opencv处理时都强制认为是四通道,因此需要相加的列表或元组必须有4个元素。

案例:

>>> import cv2
>>> imgBeauty = cv2.imread(r'F:\pic\beauty.jpg')
>>> img = imgBeauty[0:5, 0:5]
>>> img.shape #结果表明图像是3通道
(5,5,3)
>>> import cv2
>>> import numpy as np
>>> imgBeauty = cv2.imread(r'F:\pic\beauty.jpg')
>>> img = imgBeauty[0:5, 0:5]
>>> mask = np.zeros([5, 5], dtype=np.uint8)
>>> cv2.add(img,(1,1,1,1))
array([[[231, 226, 225],
        [231, 226, 225],
        [231, 226, 225],
        [230, 225, 224],
        [228, 223, 222]],

       [[232, 227, 226],
        [231, 226, 225],
        [231, 226, 225],
        [231, 226, 225],
        [230, 225, 224]],

       [[232, 227, 226],
        [232, 227, 226],
        [232, 227, 226],
        [232, 227, 226],
        [231, 226, 225]],

       [[231, 226, 225],
        [232, 227, 226],
        [232, 227, 226],
        [232, 227, 226],
        [231, 226, 225]],

       [[232, 227, 226],
        [233, 228, 227],
        [232, 227, 226],
        [232, 227, 226],
        [231, 226, 225]]], dtype=uint8)

如果将上面的cv2.add(img,(1,1,1,1))换成cv2.add(img,(1,1,1))则报错。

更多OpenCV-Python的介绍请参考专栏《OpenCV-Python图形图像处理》相关文章。

关于老猿的付费专栏

老猿的付费专栏《使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,付费专栏《moviepy音视频开发专栏》详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,两个专栏都适合有一定Python基础但无相关知识的小白读者学习。

付费专栏文章目录:《moviepy音视频开发专栏文章目录》、《使用PyQt开发图形界面Python应用专栏目录》。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《专栏:Python基础教程目录》从零开始学习Python。

如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

跟老猿学Python、学OpenCV!

☞ ░ 前往老猿Python博文目录

猜你喜欢

转载自blog.csdn.net/LaoYuanPython/article/details/109017695