Python 从图像中删除特定颜色
是否可以从图像中删除特定的rbg颜色?例如,我想创建一个函数,将图像和颜色作为参数传递,它返回相同的图像,但没有该颜色 例如,此函数 功能(图像,“R”) 应该给我一个没有R阴影的图像。我怎样才能做到 目前,类似这样的方法可以起作用: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 =
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()
)加载的图像作为参数传递给函数,然后在函数内部,您尝试在同一图像上使用枕头库的功能
这就是为什么它不应该工作的原因,您正在两个不同的库之间合并。
在我看来,有两种可能的解决方案:
在这里,我们操作的是
图像\u数据
。如何从函数返回修改后的图像?仅使用“return image”而不是“image.save(…)”?是否可以查看更新的qs?该方法单独工作,但不适用于我想如何读取图像。是的,我可以。我刚刚编辑了我自己的答案作为回应。谢谢。我遇到了另一个解决方案(我在qs中添加了)。我真的不明白索引是如何工作的。你能看一下吗?
out = image.copy()
if (channel == "R"):
out[:, :, 0] = 0