我正在尝试用Python中的OpenCV替换未分段的图像的分段部分。这些图片会让你明白我的意思。
以下图片是分割前的第一张图片:
这是分段后的图片:
这是继我正在谈论的第三张照片之后:
我该怎么做?在此先感谢您的帮助!
答案 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组成。
这是我得到的输出:
希望这有帮助!
答案 1 :(得分:1)
基本上,你有一个分割蒙版和一个图像。您需要做的就是复制图像中与标签掩码中的像素对应的像素。通常,蒙版尺寸和图像尺寸相同(如果不是,则需要将蒙版的大小调整为图像尺寸)。此外,对应于特定掩模的分割像素将具有相同的整数值(1,2,3等,并且背景像素将具有值0)。因此,找出哪些像素坐标具有与掩模值对应的值,并使用这些坐标来找出图像中的强度值。如果您知道如何访问像素坐标的语法,请在您正在使用的编程环境中读取图像并按照上述步骤操作,您应该能够执行此操作。