Python 从图像中删除特定颜色

Python 从图像中删除特定颜色,python,machine-learning,computer-vision,rgb,scikit-image,Python,Machine Learning,Computer Vision,Rgb,Scikit Image,是否可以从图像中删除特定的rbg颜色?例如,我想创建一个函数,将图像和颜色作为参数传递,它返回相同的图像,但没有该颜色 例如,此函数 功能(图像,“R”) 应该给我一个没有R阴影的图像。我怎样才能做到 目前,类似这样的方法可以起作用: def exclusionWithPIL(image, channel): out = None image = Image.open(image) image_data = image.load() height,width =

是否可以从图像中删除特定的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)
如何相应地修改函数? 另外,我使用略读中的io.imread读取图像

编辑: 如果我将io.imread加载的图像直接传递到函数中,类似这样的操作似乎会起作用:

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

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

在网上找到了一个教程,它正好解决了您的问题:

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


EDIT:我认为出现问题的原因是,您试图将使用sicikit image库(
io.imread()
)加载的图像作为参数传递给函数,然后在函数内部,您尝试在同一图像上使用枕头库的功能

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

  • 将函数的参数设置为图像的路径,而不是图像本身,然后将图像保存在同一目录中,并且不返回任何内容
  • 保持一致,在将图像作为参数传递给函数之前,请使用PILLOW库加载图像,返回图像时,请仅根据PILLOW库参考返回的图像

  • 在这里,我们操作的是
    图像\u数据
    。如何从函数返回修改后的图像?仅使用“return image”而不是“image.save(…)”?是否可以查看更新的qs?该方法单独工作,但不适用于我想如何读取图像。是的,我可以。我刚刚编辑了我自己的答案作为回应。谢谢。我遇到了另一个解决方案(我在qs中添加了)。我真的不明白索引是如何工作的。你能看一下吗?
        out = image.copy()
        if (channel == "R"):
            out[:, :, 0] = 0