使用“添加到图像中”有什么不同+&引用;还有Python中Opencv中的add()方法?
假设我们有两个图像:img1和img2。 当使用+或cv2.add()将这两者相加时,我们会得到不同的结果。为什么呢?它们有何不同使用“添加到图像中”有什么不同+&引用;还有Python中Opencv中的add()方法?,python,opencv,Python,Opencv,假设我们有两个图像:img1和img2。 当使用+或cv2.add()将这两者相加时,我们会得到不同的结果。为什么呢?它们有何不同 img = img1 + img2 img = cv2.add(img1, img2) 从opencv: 图像添加您可以使用OpenCV功能添加两个图像, cv.add(),或者简单地通过numpy操作res=img1+img2。二者都 图像应该具有相同的深度和类型,或者第二个图像可以 可以是标量值 注意OpenCV加法和Numpy加法之间存在差异。 OpenCV
img = img1 + img2
img = cv2.add(img1, img2)
从opencv:
图像添加您可以使用OpenCV功能添加两个图像,
cv.add(),或者简单地通过numpy操作res=img1+img2。二者都
图像应该具有相同的深度和类型,或者第二个图像可以
可以是标量值
注意OpenCV加法和Numpy加法之间存在差异。
OpenCV加法是一种饱和运算,而Numpy加法是一种饱和运算
模运算。例如,考虑下面的样本:
当
添加两个图像。坚持使用OpenCV函数,
因为它们将提供更好的结果
从opencv:
图像添加您可以使用OpenCV功能添加两个图像,
cv.add(),或者简单地通过numpy操作res=img1+img2。二者都
图像应该具有相同的深度和类型,或者第二个图像可以
可以是标量值
注意OpenCV加法和Numpy加法之间存在差异。
OpenCV加法是一种饱和运算,而Numpy加法是一种饱和运算
模运算。例如,考虑下面的样本:
当
添加两个图像。坚持使用OpenCV函数,
因为它们将提供更好的结果
考虑到您的
img1
和img2
变量是dtype==np.uint8
:
img1+img2
是numpy
加法,这是一种modulo
操作,而cv2.add(img1+img2)
是饱和的
操作
np.uint8
是8位无符号整数(从0到255),因此如果结果超出范围,则numpy
和opencv
会以不同的方式处理。例如:
>>> img1 = np.uint8([250])
>>> img2 = np.uint8([50])
# numpy
>>> img1 + img2
array([44], dtype=uint8) # (250 + 50) % 256 = 44
# it takes the modulo of 256
# opencv
>>> cv2.add(img1, img2)
array([[255]], dtype=uint8) # min(max(0, (250 + 50)), 255) = 255 or np.clip(300, 0, 255)
# it saturates to 255
对于
np.uint8
,考虑到您的img1
和img2
变量为dtype==np.uint8
,范围将是(04294967295):
img1+img2
是numpy
加法,这是一种modulo
操作,而cv2.add(img1+img2)
是饱和的
操作
np.uint8
是8位无符号整数(从0到255),因此如果结果超出范围,则numpy
和opencv
会以不同的方式处理。例如:
>>> img1 = np.uint8([250])
>>> img2 = np.uint8([50])
# numpy
>>> img1 + img2
array([44], dtype=uint8) # (250 + 50) % 256 = 44
# it takes the modulo of 256
# opencv
>>> cv2.add(img1, img2)
array([[255]], dtype=uint8) # min(max(0, (250 + 50)), 255) = 255 or np.clip(300, 0, 255)
# it saturates to 255
对于np.uint8
范围将是(04294967295)
为什么x+y取256的模多?256是从哪里来的?不确定,但我猜它必须与整数运算有关,numpy256是8位中可表示值的数目=>0到255这是溢出的结果。如果超过255,它将进行模255运算。这是有限精度numpy阵列的预期行为。为什么x+y采用256的模多?256是从哪里来的?不确定,但我猜它必须与整数运算有关,numpy256是8位中可表示值的数目=>0到255这是溢出的结果。如果超过255,它将进行模255运算。这是有限精度numpy阵列的预期行为。