gpt4 book ai didi

python - OpenCV python 图像冲刷

转载 作者:太空狗 更新时间:2023-10-30 01:12:05 25 4
gpt4 key购买 nike

我正在尝试使用以下代码显示平均合并图像:

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)

Bycycle - original Dolphin - original

以下代码将两张图片相加,结果与类(class)中展示的相同。但是简单的加法 avg=img1+img2 不起作用。

Simple addition - washout areas

sumimg=cv2.add(dolphin,bicycle)
cv2.imshow('Sum image', sumimg)

两张图片未经任何修改加在一起 ​​- 冲刷区域是由于该元素的加法超过 255,所以该值设置为 255

cv2.waitKey(0)
cv2.destroyAllWindows()

下面的代码只给我一个白色的图像。当我尝试显示半强度海豚或循环时......结果相同,但有几个黑点

Adding images with division by 2

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 添加图像,您应该得到: From Udacity course - two images added after dividing by 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()

注意:在前面的链接中也提到过,重要的是要注意 numpyOpenCV 添加是不同的,因为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com