【问题标题】:Cut out or remove the pixels from an image that run into the black pixels of a mask从图像中切出或移除遇到蒙版黑色像素的像素
【发布时间】:2020-02-19 09:22:44
【问题描述】:

我正在尝试使用 Python 使用 OpenCV 剪切两个图像。

我们的想法是使用这样的图像:

作为面具。注意:这只是一个例子。

因此,如果我将此蒙版减去另一个图像,我将得到一个原始像素仅位于与蒙版中的白色矩形相同的位置的图像。因此,我们的想法是从第一张图像中删除与蒙版中黑色像素相同位置的像素。

我该怎么做?

也许我可以在两个图像之间进行 AND 操作(蒙版只有 0(黑色)和 1(白色像素)。

【问题讨论】:

  • 为什么不直接反转掩码和 bitwise_and 呢? inverted_mask = 255 - mask
  • 删除是什么意思?你想要它们透明还是白色?还是要将图像裁剪到与白色矩形相同的边界?

标签: python image opencv


【解决方案1】:

如果您要问的是如何使蒙版为黑色的图像透明,而蒙版为白色的图像不透明,那么只需将蒙版添加到输入的 Alpha 通道即可。以下是如何在 Python/OpenCV 中执行此操作。 (根据 Mark Setchell 的评论修改)

输入:

面具:

import cv2
import numpy as np

# load image
img = cv2.imread('lena.png')

# load mask as grayscale
mask = cv2.imread('rect_mask.png', cv2.COLOR_BGR2GRAY)

# put mask into alpha channel of image
#result = img.copy()
#result = cv2.cvtColor(result, cv2.COLOR_BGR2BGRA)
#result[:, :, 3] = mask
result = np.dstack((img, mask))

# save resulting masked image
cv2.imwrite('lena_masked.png', result)


结果:

【讨论】:

  • 不错!或者更简单地说,将以result开头的3行替换为result = np.dstack((img,mask))
  • 感谢您的改进,马克。相应地编辑
  • 我的图片大小相同。请下载它,你会看到的。图像的其余部分是透明的,因此在此处查看时,背景是白色的,因此不会显示。所以它看起来更小。
  • 我还没有将图像写入文件。在我的例子中,imgmask 是形状为 (240, 240) 的 Numpy 数组,结果是 (240, 240, 2)。这是正确的,因为我需要(240, 240) 形状的结果。
  • 我的颜色输入是 (256,256,3)。我生成的图像包括 alpha 通道,因此 (256,256,4),即 4 个通道。如果您的输入是 (240,240),则表示它是灰度的。因此,如果您通过 np.dstack() 添加掩码,您将拥有 (240,240,2)。
【解决方案2】:

我就是这样做的。

输入数组的形状为(240, 240),输出数组的形状为(240, 240)

我将使用 mask 数组中值为 0 的索引屏蔽 image 数组中的索引。

def cut_out(image, mask):
    if type(image) != np.ndarray:
        raise TypeError("image must be a Numpy array")
    elif type(mask) != np.ndarray:
        raise TypeError("mask must be a Numpy array")
    elif image.shape != mask.shape:
        raise ValueError("image and mask must have the same shape")

    return np.where(mask==0, 0, image)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-02
    • 2020-06-14
    • 1970-01-01
    • 2015-05-05
    • 2023-02-02
    • 1970-01-01
    相关资源
    最近更新 更多