从图像中删除特定颜色

问题描述

是否可以从图像中删除特定的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,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

如何相应地修改功能? 附言:我使用skimage中的io.imread读取图像。

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

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

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

解决方法

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

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


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

这就是为什么它不起作用的原因,您正在2个不同的库之间进行合并。 如我所见,有两种可能的解决方案:

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...