问题描述
是否可以从图像中删除特定的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个不同的库之间进行合并。 如我所见,有两种可能的解决方案:
- 使函数的参数成为图像的路径,而不是图像本身,然后将图像保存在同一目录中,并且不返回任何内容。
- 保持一致,在将函数作为参数传递给图像之前,请使用 PILLOW 库加载该图像,并在返回该图像时,以 PILLOW 仅库。