首页 文章

opencv python复制掩模区域(黑色或白色像素)到BGR图像区域上

提问于
浏览
2

在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的新手)

1 回答

  • 0

    如果您尝试直接使用单通道(灰度)掩码,则阵列切片的形状将不同,操作将失败 .

    >>> 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]
    

相关问题