【问题标题】:opencv python copy mask region (black or white pixels) onto a BGR image regionopencv python将掩码区域(黑色或白色像素)复制到BGR图像区域
【发布时间】:2016-10-01 03:04:33
【问题描述】:

在 OpenCV python 中,假设我们使用 cv2.imread 读取图像并获得 BGR numpy 数组。接下来我们使用 cv2.inRange 命令生成一个掩码。遮罩具有相同的宽度/高度,并且每个遮罩像素是黑色或白色。

我想将蒙版中的一个区域(作为黑白像素的图像)复制到彩色图像的一个区域上。

我该怎么做?这不起作用

img[10:20,10:20] = mask[10:20,10:20]

我必须先将蒙版转换为 BGR 图像吗?如果有怎么办?

编辑:我不想像apply mask to color image 那样将整个蒙版应用于图像。表达我想要的另一种方式:将蒙版视为黑白图像。我想将该图像的一个区域(作为一组黑色或白色像素)复制到另一个图像上。生成的图像将是彩色图像,除了一个仅包含黑色或白色像素的较小矩形区域。结果将类似于我在 Photoshop 中复制黑白图像的矩形区域并通过该矩形区域到彩色图像的区域。

(我是 OpenCV 新手)

【问题讨论】:

  • “从掩码复制区域”是什么意思?你能用一张图片来展示它吗?
  • 掩码是二进制的。我想将遮罩区域(坐标)中的每个黑色或白色像素复制到(替换)图像中的相同像素区域。类似于我在 Photoshop 中选择并复制一张图像上的矩形区域并将其粘贴到另一张图像上。
  • apply mask to color image的可能重复
  • 如果我正确理解链接的“将蒙版应用于彩色图像”页面,它会将整个蒙版应用于图像。我不要那个。表达我想要的另一种方式:将蒙版视为黑白图像。我想将该图像的一个区域(作为一组黑色或白色像素)复制到另一个图像上。生成的图像将是彩色图像,除了一个仅包含黑色或白色像素的较小矩形区域(与蒙版图像中的图案相同)。
  • 好的。在这种情况下,您必须将蒙版视为图像,并将其转换为与img 相同的色彩空间,然后再合并它们。你试过吗?

标签: python opencv


【解决方案1】:

如果尝试直接用单通道(灰度)蒙版做,数组切片的形状会不一样,操作会失败。

>>> img[10:20,10:20] = mask[10:20,10:20]

ValueError: could not broadcast input array from shape (10,10) into shape (10,10,3)

您必须将蒙版转换为 BGR,这将使其成为 3 个通道,就像原始图像一样。

>>> bgr_mask = cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR)
>>> img[10:20,10:20] = bgr_mask[10:20,10:20]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-09
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 2018-06-06
    • 2015-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多