用它未分段的部分替换图像的分段部分

时间:2014-07-19 19:35:30

标签: python opencv image-processing computer-vision

我正在尝试用Python中的OpenCV替换未分段的图像的分段部分。这些图片会让你明白我的意思。

以下图片是分割前的第一张图片:

FIrst picture(before segmentation)

这是分段后的图片:

Second picture (after segmentation)

这是继我正在谈论的第三张照片之后:

Third image (that is what is in my mind)

我该怎么做?在此先感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

这实际上非常简单。您所要做的就是在分割后拍摄照片,然后将其乘以遮罩,其中遮罩中0的任何像素都变为1,其他任何像素都变为0。

除了遮罩中的像素为1之外,这将基本上使所有像素变黑。通过将图像中的每个像素乘以遮罩,您将有效地生成您在图中显示的内容,但是背景是黑色的。您现在要做的就是弄清楚掩码中的哪些位置是白色的,并将输出图像中的相应位置设置为白色。换句话说:

import cv2

# Load in your original image
originalImg = cv2.imread('Inu8B.jpg',0)

# Load in your mask
mask = cv2.imread('2XAwj.jpg', 0)

# Get rid of quantization artifacts
mask[mask < 128] = 0
mask[mask > 128] = 1

# Create output image
outputImg = originalImg * (mask == 0)
outputImg[mask == 1] = 255

# Display image
cv2.imshow('Output Image', outputImg)
cv2.waitKey(0)
cv2.destroyAllWindows()

请注意,我从您的帖子下载了图像并从我的计算机上加载了这些图像。此外,由于JPEG,您的蒙版会有一些量化伪像,因此我在强度为128时设置阈值,以确保您的图像由0或1组成。

这是我得到的输出:

enter image description here

希望这有帮助!

答案 1 :(得分:1)

基本上,你有一个分割蒙版和一个图像。您需要做的就是复制图像中与标签掩码中的像素对应的像素。通常,蒙版尺寸和图像尺寸相同(如果不是,则需要将蒙版的大小调整为图像尺寸)。此外,对应于特定掩模的分割像素将具有相同的整数值(1,2,3等,并且背景像素将具有值0)。因此,找出哪些像素坐标具有与掩模值对应的值,并使用这些坐标来找出图像中的强度值。如果您知道如何访问像素坐标的语法,请在您正在使用的编程环境中读取图像并按照上述步骤操作,您应该能够执行此操作。