使用 OpenCV 和遮罩合并图像
Merge images using OpenCV and a mask
我一直在使用 OpenCV 和 Python 执行一些图像操作。我已经设法分离出我感兴趣的轮廓。现在我有两张图像,一张 NDVI 图像和一张普通图像。我想用我的面具将两者合并。所以如果我的蒙版的像素位置是零,它应该使用图像一的像素,如果我的蒙版的像素位置是一,那么它应该使用图像二的像素。基于此,我想合并我的两张照片。
如有任何建议,我们将不胜感激:)!
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]
所以要明确一点,在 mask
为 True
的所有点,此 comb_img
的值为 img1
,否则为 [=19] =].
另一种可能更明确的组合两个图像的方法是首先将组合图像创建为空白图像,然后在遮罩点插入一个图像,然后在翻转的遮罩点插入另一个图像:
>>> 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==0
和mask>0
创建逻辑数组来索引。
我一直在使用 OpenCV 和 Python 执行一些图像操作。我已经设法分离出我感兴趣的轮廓。现在我有两张图像,一张 NDVI 图像和一张普通图像。我想用我的面具将两者合并。所以如果我的蒙版的像素位置是零,它应该使用图像一的像素,如果我的蒙版的像素位置是一,那么它应该使用图像二的像素。基于此,我想合并我的两张照片。
如有任何建议,我们将不胜感激:)!
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]
所以要明确一点,在 mask
为 True
的所有点,此 comb_img
的值为 img1
,否则为 [=19] =].
另一种可能更明确的组合两个图像的方法是首先将组合图像创建为空白图像,然后在遮罩点插入一个图像,然后在翻转的遮罩点插入另一个图像:
>>> 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==0
和mask>0
创建逻辑数组来索引。