使用OpenCV和掩码合并图像

时间:2017-09-17 18:23:10

标签: python image opencv mask

我一直在使用OpenCV和Python执行一些图像操作。我设法隔离了我感兴趣的轮廓。现在我有两个图像,一个NDVI图像和一个普通图像。我想用我的面具合并两个。因此,如果我的蒙版的像素位置为零,则应该使用图像1的像素,如果我的蒙版的像素位置是1,那么它应该使用图像2的像素。基于此我想合并我的两张照片。

任何建议都将不胜感激:)!

1 个答案:

答案 0 :(得分:1)

使用numpy indexing by mask非常容易。

有许多不同的方法可以做到这一点。例如,这是两个浮动图像。然后我创建一个布尔掩码(在这种情况下,我采用随机浮动图像,大约一半的像素将被包括,一半被排除)。然后,对于组合图像,您可以将其设置为等于其中一个图像,然后在掩码为True的任何位置插入另一个图像中的值:

>>> import numpy as np
>>> img1 = np.random.rand(100,100,3)
>>> img2 = np.random.rand(100,100,3)
>>> mask = np.random.rand(100,100)>.5
>>> comb_img = img2.copy()
>>> comb_img[mask] = img1[mask]

所以要明确的是,在maskTrue的所有点上,此comb_img的值为img1,否则值为img2

另一种可以组合两个可能更明确的图像的方法是首先将组合图像创建为空白图像,然后在蒙版点插入一个图像,然后将另一个图像插入翻转的蒙版点: / p>

>>> comb_img = np.zeros_like(img1)
>>> comb_img[mask] = img1[mask]
>>> comb_img[~mask] = img2[~mask]

并且你没有看到它,因为布尔numpy数组~反转它:

>>> ~np.array([True, False, True])
array([False,  True, False], dtype=bool)

当然你的面具也可以是数字的,你可以使用mask==0mask>0来创建用于索引的逻辑数组。