Python 使用OpenCV混合多个图像
使用python将多个图像与OpenCV混合的方法是什么?我遇到了以下片段:Python 使用OpenCV混合多个图像,python,image,opencv,Python,Image,Opencv,使用python将多个图像与OpenCV混合的方法是什么?我遇到了以下片段: img = cv2.addWeighted(mountain, 0.3, dog, 0.7, 0) 在 这显示了一种混合两幅图像的方法mountain和dog。如果我想混合两个以上的图像呢?我怎么能这样做 您可以根据以下顺序混合所有图像: 混合前两个图像 将结果与下一幅图像混合 诸如此类 每个图像的权重可能有问题,但这是另一个问题。要使所有图像的强度相等,可以使用索引计算适当的部分: for idx, img in
img = cv2.addWeighted(mountain, 0.3, dog, 0.7, 0)
在
这显示了一种混合两幅图像的方法
mountain
和dog
。如果我想混合两个以上的图像呢?我怎么能这样做 您可以根据以下顺序混合所有图像:
for idx, img in enumerate(imgs):
if idx == 1:
first_img = img
continue
else:
second_img = img
second_weight = 1/(idx+1)
first_weight = 1 - second_weight
first_img = cv2.addWeighted(first_img, first_weight, second_img, second_weight, 0)
您可以根据以下顺序混合所有图像:
for idx, img in enumerate(imgs):
if idx == 1:
first_img = img
continue
else:
second_img = img
second_weight = 1/(idx+1)
first_weight = 1 - second_weight
first_img = cv2.addWeighted(first_img, first_weight, second_img, second_weight, 0)
试试这个:
blendedImage=weight_1*image_1+weight_2*image_2+…+权重*image\n试试这个:
blendedImage=weight_1*image_1+weight_2*image_2+…+权重*image\n下面是将多个图像混合到一个列表中的Python代码。我使用了沙姆谢尔答案中的基本公式 首先,让我们得到三张图片
将numpy导入为np
进口cv2
将matplotlib.pyplot作为plt导入
将matplotlib.image导入为mpimg
尺寸=(425425)
apple=mpimg.imread('apple.jpg')
苹果=cv2。调整大小(苹果,尺寸)
banana=mpimg.imread('banana.jpg')
香蕉=cv2。调整大小(香蕉,变暗)
orange=mpimg.imread('orange.jpg')
橙色=cv2。调整大小(橙色,暗淡)
_=plt.imshow(苹果)
_=plt.show()
_=plt.imshow(香蕉)
_=plt.show()
_=plt.imshow(橙色)
_=plt.show()
以下是图片:
现在让我们把它们均匀地混合在一起。由于有三个图像,因此每个图像对最终输出的贡献分数为0.333
def混合(列出图像):#均匀混合图像。
等分=1.0/(透镜(列表图像))
输出=np.zeros_like(列表图像[0])
对于列表_图像中的img:
输出=输出+img*相等分数
output=output.astype(np.uint8)
返回输出
列表图片=[苹果、香蕉、橙色]
输出=混合(列出图像)
_=plt.imshow(输出)
结果如下:
下面是将多个图像混合到一个列表中的Python代码。我使用了沙姆谢尔答案中的基本公式 首先,让我们得到三张图片
将numpy导入为np
进口cv2
将matplotlib.pyplot作为plt导入
将matplotlib.image导入为mpimg
尺寸=(425425)
apple=mpimg.imread('apple.jpg')
苹果=cv2。调整大小(苹果,尺寸)
banana=mpimg.imread('banana.jpg')
香蕉=cv2。调整大小(香蕉,变暗)
orange=mpimg.imread('orange.jpg')
橙色=cv2。调整大小(橙色,暗淡)
_=plt.imshow(苹果)
_=plt.show()
_=plt.imshow(香蕉)
_=plt.show()
_=plt.imshow(橙色)
_=plt.show()
以下是图片:
现在让我们把它们均匀地混合在一起。由于有三个图像,因此每个图像对最终输出的贡献分数为0.333
def混合(列出图像):#均匀混合图像。
等分=1.0/(透镜(列表图像))
输出=np.zeros_like(列表图像[0])
对于列表_图像中的img:
输出=输出+img*相等分数
output=output.astype(np.uint8)
返回输出
列表图片=[苹果、香蕉、橙色]
输出=混合(列出图像)
_=plt.imshow(输出)
结果如下:
如何使用混合图像的结果并将其与另一个图像混合?如何使用混合图像的结果并将其与另一个图像混合?理想情况下,您希望每个图像都有一个部分贡献,对应于被混合的图像数(在本例中为1/9),而不是一半。我想到一个计数器变量,用来计算正确的部分。干得好。一些人可能对这篇文章感兴趣,这篇文章说明了平均值,特别是在PHOTOSHOP中使用LAYERS@SimonFink算法仍然没有达到预期的效果。第一个图像的权重应为1/9,然后与其他图像一起添加时,您将使用第一个图像(权重1),每隔一个图像的权重为1/9。@Croolman如果您有一层,则使用所有图像(100%)。如果你有两层,你希望底层在100%,第二层在50%(1/2)以上,那么在最终的结果中,你将得到每层的一半。如果有3层,则取顶层的33%(1/3),然后取其他2/3,即之前从2层图像中得到的,即底部和第一层各占一半,并且占据剩余的2/3,这将对应于底部2层各占1/3。因此,您希望每个新层的比例N为1/(N+1)。理想情况下,您希望每个图像的部分贡献与被混合的图像数量(在本例中为1/9)相对应,而不是一半。我想到了一个计数器变量,用于计算正确的部分。做得好。一些人可能对这篇文章感兴趣,这篇文章说明了平均值,特别是在PHOTOSHOP中使用LAYERS@SimonFink算法仍然没有达到预期的效果。第一个图像的权重应为1/9,然后与其他图像一起添加时,您将使用第一个图像(权重1),每隔一个图像的权重为1/9。@Croolman如果您有一层,则使用所有图像(100%)。如果你有两层,你希望底层在100%,第二层在50%(1/2)以上,那么在最终的结果中,你将得到每层的一半。如果有3层,则取顶层的33%(1/3),然后取其他2/3,即之前从2层图像中得到的,即底部和fir的一半