【问题标题】:How to overlay image mask onto the original image but show only the mask bounding box?如何将图像蒙版叠加到原始图像上但仅显示蒙版边界框?
【发布时间】:2021-01-26 02:05:21
【问题描述】:

我有一个包含数百张图像的文件夹和另一个带有相应掩码的文件夹。图像和蒙版的名称都相同,例如image1.png 的掩码也被命名为“image1.png”。所有图像均为灰度。

我需要在循环中将蒙版叠加到原始图像上,但仅显示蒙版边界框,同时使蒙版的内表面完全透明以显示原始图像区域,如上所示。当前代码读取包含图像和蒙版的文件夹,但我需要按要求提供覆盖方面的帮助。

import pandas as pd
import cv2
import numpy as np
import glob
import os
images = glob.glob("images\*.png")
masks = glob.glob("masks\*.png")
images.sort()
masks.sort()
for f1,f2 in zip(images,masks):
    img1 = cv2.imread(f1)
    img2 = cv2.imread(f2)
    img_1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
    img_2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
    img_name = f2.split(os.sep)[-1]
    contours, _ = cv2.findContours(img_2, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    combined = cv2.drawContours(img_1, contours, -1, (0,255,0),1)
    cv2.imwrite("combined/{}.png".format(img_name[:-4]),combined) 

【问题讨论】:

  • 请单独提供您的图片,而不是并排截屏。你还说有些东西需要有颜色,但在我看来一切都是灰色的?
  • 我不明白您所说的彩色蒙版是什么意思。你的面具是黑白的。您是否只希望蒙版的轮廓在图像上显示为黑色。如果是这样,一种方法是获取蒙版的轮廓,然后将它们绘制在黑色图像上。
  • 我编辑了我的代码以找到轮廓并将它们绘制在原始图像上。但是现在,我只得到最后一张存储的图像,并覆盖了相应的蒙版。除了最后一张图像和遮罩外,循环丢失了所有图像和遮罩。
  • 您的面具是否总是 90° 矩形?因为那样找到轮廓真的是大材小用。
  • 是的,它们是边界框(矩形)。我不需要颜色的边界框。图像和蒙版都是灰度图像。边界框也将是灰度的。

标签: python opencv image-processing overlay mask


【解决方案1】:

我发现了问题。我需要在 for 循环中使用 Zip。我已相应地更正了代码。

【讨论】:

    猜你喜欢
    • 2019-08-13
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-09
    • 2019-10-13
    • 2021-09-13
    相关资源
    最近更新 更多