作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试使用以下代码显示平均合并图像:
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)
以下代码将两张图片相加,结果与类(class)中展示的相同。但是简单的加法 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 类(class)表明,如果您按除以 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()
注意:在前面的链接中也提到过,重要的是要注意 numpy
和 OpenCV
添加是不同的,因为 numpy
具有模运算 (%) 而 OpenCV
具有饱和运算(最大上限),为了澄清我们从该链接中提取了这个示例:
>>> 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 并显示白色)。
关于python - OpenCV python 图像冲刷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45044883/
我是一名优秀的程序员,十分优秀!