我使用matplotlib制作一些图表,不幸的是我没有白色背景导出它们.

换句话说,当我导出这样的图并将其放在另一个图像的顶部时,白色背景会隐藏它背后的内容,而不是允许它透过.如何导出透明背景的图?
试图用PIL 创建一个透明的gif.到目前为止我有这个:
from PIL import Image
img = Image.new('RGBA', (100, 100), (255, 0, 0, 0))
img.save("test.gif", "GIF", transparency=0)
Run Code Online (Sandbox Code Playgroud)
到目前为止,我发现的一切都是指操纵现有图像来调整透明度设置或将透明图像叠加到另一个上.我只想创建一个透明的GIF(然后绘制).
我试图从我的图像中删除某种颜色,但它没有像我希望的那样好用.我尝试做同样的事情使用PIL使所有白色像素透明?然而,图像质量有点损失,因此它会在被移除的地方留下一些奇怪的彩色像素.如果所有三个值都低于100,我尝试做像更改像素这样的事情但由于图像质量差,周围的像素甚至都不是黑色.
有没有人知道用Python中的PIL更好的方法来替换它周围的颜色和任何东西?这可能是我能想到的完全移除物体的唯一确定的火力方式,但我想不出办法做到这一点.
图片为白色背景,文字为黑色.我们只想说我想从图像中完全删除文本而不留下任何文物.
非常感谢别人的帮助!谢谢
对于那些不熟悉Gimp的"Color to Alpha"功能的人来说,这里是Gimp文档中的页面:Color to Alpha.它确实做得非常好,我很清楚Gimp在颜色操作方面的确如此,无论颜色可能是哪个颜色空间.感谢一堆提示.
编辑1:根据像素与关键颜色(您在"颜色到Alpha"对话框中选择的颜色)的相似性生成像素的透明度信息,就像一些人在出于某种原因删除答案之前建议的那样,听起来像是一个很好的洞察力,但我认为它比那更复杂.假设我们估计单位范围内的颜色相似度从0.0到1.0,我们有一个像素的颜色,例如,0.4,类似于白色的颜色(就像你在"颜色到"中选择白色一样) Alpha"对话框",因此像素的alpha值为0.6,那么当结果像素显示在具有0.6的alpha的白色背景时,你将如何改变像素的实际颜色以补偿亮度/亮度/饱和度的松散?
编辑2:实际上是更新:如何在不改变结果颜色的情况下更改像素的alpha值,回答了与第一次编辑相关的子问题?但它可能不是完整的故事,因为Gimp的"颜色到Alpha"功能的来源并不那么简单,似乎是基于特定的算法而不是公式.
有没有办法让图像半透明?
伪代码是这样的:
from PIL import Image
image = Image.open('image.png')
image = alpha(image, 0.5)
Run Code Online (Sandbox Code Playgroud)
我用谷歌搜索了几个小时,但我找不到任何有用的东西.
我正在尝试使用 cv2 模块从定义的 RGB 范围内的图像中提取特定颜色。在下面的示例中,我试图将火焰与黄色和白色 RGB 值之间的航天飞机排气隔离,然后打印出该范围内与图像其余部分相比的 RGB 值百分比。
这是我的最小工作示例:
import cv2
import numpy as np
from matplotlib import pyplot as plt
import imageio
img = imageio.imread(r"shuttle.jpg")
plt.imshow(img)
Run Code Online (Sandbox Code Playgroud)
这是输出图像。它来自维基百科。
img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
color1 = (255,255,0) #yellow
color2 = (255,255,255) #white
boundaries = [([color1[0], color1[1], color1[2]], [color2[0], color2[1], color2[2]])]
for (lower, upper) in boundaries:
lower = np.array(lower, dtype=np.uint8)
upper = np.array(upper, dtype=np.uint8)
mask = cv2.inRange(img, lower, upper)
output = cv2.bitwise_and(img, img, mask=mask)
ratio = cv2.countNonZero(mask)/(img.size/3)
print('pixel percentage:', np.round(ratio*100, 2)) …Run Code Online (Sandbox Code Playgroud) 我一直在尝试创建一个图像处理程序,以获取已加载图像中的所有白色像素(255,255,255),并将其alpha通道设置为0(非不透明),然后保存图像。
我一直在使用Python的pygame扩展来帮助我实现这一目标,但是到目前为止,我还没有找到一种简单的方法来完成上述操作。
请记住,我不是要显示图像,而是要操纵它。
我正在尝试以编程方式删除少数图像的白色背景并使其透明。图像的格式很简单,它具有白色背景和主要位于中间的单个对象。
我想复制https://remove.bg网站的功能,使图像背景透明。
我尝试过使用sharp或imageMagick软件使背景透明。但它也使主对象内的一些像素变得透明。这是我绝对不想要的。
正在使用下面的代码imageMagik将白色背景转换为透明
convert brownie.jpg -transparent white brownie.png
convert cakebig.jpg -fuzz 1% -transparent white cakebig.png
似乎工作不完美。
运行命令后,图像确实变得透明,但主对象内的少数像素也受到影响。
输入图像

ImageMagik 的输出(查看主对象内的一些像素如何变得透明)

https://remove.bg的预期输出(看不到对主对象的影响)

这似乎是一个图像处理问题,似乎OpenCV是最好的解决方案。我对图书馆不太了解,所以有点棘手。正在检查一些代码并发现grab cut可graph cut用于图像分割的算法。但我对此并不完全确定。请帮助在 OpenCV 中找到正确的解决方案。