OpenCV python 图像冲刷
OpenCV python image washout
我正在尝试使用以下代码显示平均合并图像:
import numpy as np
import cv2
import matplotlib.pyplot as plt
dolphin=cv2.imread('dolphin.png',0) #Also tried without the 0
bicycle=cv2.imread('bicycle.png',0)
以下代码将两张图片相加,结果与课程中展示的相同。但是简单的加法 avg=img1+img2 不起作用。
sumimg=cv2.add(dolphin,bicycle)
cv2.imshow('Sum image', sumimg)
两张图片未经任何修改加在一起 - 冲刷区域是由于该元素的加法超过 255,因此值设置为 255
cv2.waitKey(0)
cv2.destroyAllWindows()
下面的代码只是给了我一个白色的图像。当我尝试显示半强度海豚或循环时...结果相同,但有几个黑点
avgimg=cv2.add(dolphin/2,bicycle/2)
avgimg=img1/2+img2/2
得到的结果相同
cv2.imshow('Avg image', avgimg)
cv2.waitKey(0)
cv2.destroyAllWindows()
Udacity 课程表明,如果您按除以 2 添加图像,您应该得到:
所以问题是:当我将其中一个图像除以 2 时,矩阵包含小于 255 的值,并且两个矩阵的相加也包含小于 255 的值,为什么生成的图像是完整的冲刷?
如果您希望将两个图像合二为一(这样它们都会出现在生成的图像上),对每个输入进行平均,您应该使用 addWeighted()
方法,就像这样(取自docs):
import numpy as np
import cv2
#load your images
dolphin = cv2.imread('dolphin.png') #use 0 for grayscale
bicycle = cv2.imread('bicycle.png')
#add them with a weight, respectively, last parameter is a scalar added
dst = cv2.addWeighted(dolphin,0.7,bicycle,0.3,0)
#show
cv2.imshow('Blended Image',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
注意:在前面link中也提到过,需要注意的是numpy
和OpenCV
的加法是不同的,因为 numpy
有模运算 (%) 而 OpenCV
有饱和运算(最大上限),为了澄清我们从 link:
中提取了这个例子
>>> x = np.uint8([250])
>>> y = np.uint8([10])
>>> print( cv2.add(x,y) ) # 250+10 = 260 => 255 , saturated
[[255]]
>>> print( x+y ) # 250+10 = 260 % 256 = 4 , modulo
[4]
这可能是您使用 add()
方法获得白色图像的原因(所有像素上限为 255 并显示白色)。
我正在尝试使用以下代码显示平均合并图像:
import numpy as np
import cv2
import matplotlib.pyplot as plt
dolphin=cv2.imread('dolphin.png',0) #Also tried without the 0
bicycle=cv2.imread('bicycle.png',0)
以下代码将两张图片相加,结果与课程中展示的相同。但是简单的加法 avg=img1+img2 不起作用。
sumimg=cv2.add(dolphin,bicycle)
cv2.imshow('Sum image', sumimg)
两张图片未经任何修改加在一起 - 冲刷区域是由于该元素的加法超过 255,因此值设置为 255
cv2.waitKey(0)
cv2.destroyAllWindows()
下面的代码只是给了我一个白色的图像。当我尝试显示半强度海豚或循环时...结果相同,但有几个黑点
avgimg=cv2.add(dolphin/2,bicycle/2)
avgimg=img1/2+img2/2
得到的结果相同cv2.imshow('Avg image', avgimg)
cv2.waitKey(0)
cv2.destroyAllWindows()
Udacity 课程表明,如果您按除以 2 添加图像,您应该得到:
所以问题是:当我将其中一个图像除以 2 时,矩阵包含小于 255 的值,并且两个矩阵的相加也包含小于 255 的值,为什么生成的图像是完整的冲刷?
如果您希望将两个图像合二为一(这样它们都会出现在生成的图像上),对每个输入进行平均,您应该使用 addWeighted()
方法,就像这样(取自docs):
import numpy as np
import cv2
#load your images
dolphin = cv2.imread('dolphin.png') #use 0 for grayscale
bicycle = cv2.imread('bicycle.png')
#add them with a weight, respectively, last parameter is a scalar added
dst = cv2.addWeighted(dolphin,0.7,bicycle,0.3,0)
#show
cv2.imshow('Blended Image',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
注意:在前面link中也提到过,需要注意的是numpy
和OpenCV
的加法是不同的,因为 numpy
有模运算 (%) 而 OpenCV
有饱和运算(最大上限),为了澄清我们从 link:
>>> x = np.uint8([250])
>>> y = np.uint8([10])
>>> print( cv2.add(x,y) ) # 250+10 = 260 => 255 , saturated
[[255]]
>>> print( x+y ) # 250+10 = 260 % 256 = 4 , modulo
[4]
这可能是您使用 add()
方法获得白色图像的原因(所有像素上限为 255 并显示白色)。