【发布时间】:2014-07-19 19:35:30
【问题描述】:
我正在尝试用 Python 中的 OpenCV 将图像的分段部分替换为未分段的部分。图片会让你明白我的意思。
下图为第一张,分割前:
这是分割后的图片:
这是第三张图片,在完成我所说的之后:
我该怎么做?提前感谢您的帮助!
【问题讨论】:
标签: python opencv image-processing computer-vision image-segmentation
我正在尝试用 Python 中的 OpenCV 将图像的分段部分替换为未分段的部分。图片会让你明白我的意思。
下图为第一张,分割前:
这是分割后的图片:
这是第三张图片,在完成我所说的之后:
我该怎么做?提前感谢您的帮助!
【问题讨论】:
标签: python opencv image-processing computer-vision image-segmentation
这其实很简单。您所要做的就是在分割后拍摄照片,并将其乘以掩码,其中掩码中的任何像素为 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、2、3 等,背景像素将具有值 0)。因此,找出哪些像素坐标具有对应于掩码值的值,并使用这些坐标找出图像中的强度值。如果您知道如何访问像素坐标的语法,在您正在使用的编程环境中读取图像并按照上述过程进行操作,您应该能够做到。
【讨论】: