【问题标题】:remove a particular color from an image从图像中删除特定颜色
【发布时间】:2021-01-16 13:57:18
【问题描述】:

是否可以从图像中删除特定的 rbg 颜色?例如,我想创建一个函数,将图像和颜色作为参数传递,它返回相同的图像,但没有颜色。

比如这个函数

函数(图像,“R”)

应该给我一个没有 R 色调的图像。我该怎么做?

目前,类似这样的工作:

def exclusionWithPIL(image, channel):
    out = None
    image = Image.open(image)
    image_data = image.load()
    height,width = image.size
    for loop1 in range(height):
        for loop2 in range(width):
            r,g,b = image_data[loop1,loop2]
            image_data[loop1,loop2] = 0,g,b
    return image

result = rgb_exclusion('./image.jpg', "G")
result.save('new.jpg')

但是在这里,我正在函数内部读取像这样的图像Image.open(image)。相反,我想传入image1,它已经像这样读取了:

image1 = load(image1_path)
def load(image_path):
    out = io.imread(image_path)
    out = out.astype(np.float64) / 255
    return out

如何相应地修改函数? P.S 我使用来自 skimage 的 io.imread 来读取图像。

编辑: 如果我将 io.imread 加载的图像直接传递给函数,这样的事情似乎有效:

    out = image.copy()
    if (channel == "R"):
        out[:, :, 0] = 0

但我不太了解索引[:, :, 0]

【问题讨论】:

    标签: python machine-learning computer-vision rgb scikit-image


    【解决方案1】:

    在网上找到了一个教程,可以完全解决您的问题: Tutorial Link

    他们解决方案背后的主要思想是使用 PIL 来打开图像,加载它,然后迭代图像中的每个像素(使用 2 个循环)并将所选颜色设置为零。


    编辑: 我认为您的问题是因为您试图将使用 加载的图像作为参数传递给函数>sicikit-image 库 (io.imread()),然后在您尝试在同一图像上使用 PILLOW 库功能的函数内部。

    这就是它不应该工作的原因,你正在合并 2 个不同的库。 在我看来,有两种可能的解决方案:

    1. 将函数的参数设为图片的路径,而不是图片本身,然后将图片保存在同一目录下,不返回任何内容。
    2. 保持一致,在将图像作为参数传递给函数之前,使用 PILLOW 库加载它,并在返回时参考返回的图像 PILLOW 仅限库。

    【讨论】:

    • 在此,我们正在操作image_data。如何从我的函数中返回修改后的图像?
    • 难道只使用:'return image',而不是:'image.save(...)' 吗?
    • 你能看到更新的qs吗?该方法单独工作,但不适用于我想要读取图像的方式。
    • 是的,我可以。我刚刚编辑了自己的答案作为回复。
    • 谢谢。我遇到了另一个解决方案(我在 qs 中添加的)。我真的不明白索引是如何工作的。你能看看吗?
    猜你喜欢
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 2020-02-07
    • 2023-04-11
    • 2020-06-03
    • 2017-07-24
    • 2014-10-13
    • 2020-04-11
    相关资源
    最近更新 更多