Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用“添加到图像中”有什么不同+&引用;还有Python中Opencv中的add()方法?_Python_Opencv - Fatal编程技术网

使用“添加到图像中”有什么不同+&引用;还有Python中Opencv中的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

假设我们有两个图像:img1和img2。 当使用+或cv2.add()将这两者相加时,我们会得到不同的结果。为什么呢?它们有何不同

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阵列的预期行为。