这是我的代码(使用带有scikit-image的Anaconda):
from skimage.io import imread
image = imread('myimage.png')
但是我想知道调色板中的哪一个是透明色,并且能够像那样对待它。这意味着:最终加载图像时,尽管来自(W, H, 3)
的信息如下,但其形状为pnginfo
为RGB:
Bitdepth(Bits / Sample):8
频道(样本/像素):1
像素深度(像素深度):8
颜色类型(光度解释):带有alpha的PALETTED COLOR(44种颜色,1种透明)
我想要三分之一:
我该怎么办?
我正在使用Anaconda,它有类似的东西:
答案 0 :(得分:0)
skimage.io.imread
方法默认使用Pillow
(因为没有传递插件参数,Pillow是调用imread等函数时的第一个首选插件),但是插件在skimage.io.imread
中没有像其他插件那样使用mode
参数。部分源代码证明了这种缺乏支持的原因是:
# This chunk of code belongs to the plugin implementation of imread.
im = Image.open(fname)
try:
# this will raise an IOError if the file is not readable
im.getdata()[0]
except IOError:
site = "http://pillow.readthedocs.org/en/latest/installation.html#external-libraries"
raise ValueError('Could not load "%s"\nPlease see documentation at: %s' % (fname, site))
else:
return pil_to_ndarray(im, dtype=dtype, img_num=img_num)
不是调用skimage.io.read
,而是在另一个包中有一个函数(scipy.ndimage.imread
,如果你有scikit-image
),它也会执行所需的技巧:
from scipy.ndimage import imread
rgba = imread('myimage.png', mode='RGBA')
答案 1 :(得分:0)
所以 scipy 已经弃用了 imread,python 说要使用 matplotlib 的 plt.imread()。 我环顾四周,发现这个例子通过删除定义白色的列来创建透明图像 代码在这里: https://www.geeksforgeeks.org/how-to-make-background-image-transparent-using-python/
from PIL import Image
def convertImage(image=image):
image = Image.open(image)
image = image.convert("RGBA")
data = image.getdata()
newData = []
for item in data:
if item[0] == 255 and item[1] == 255 and item[2] == 255:
newData.append((255, 255, 255, 0))
else:
newData.append(item)
image.putdata(newData)
image.save('newimage.png', "PNG")
#
convertImage('apple.jpg')
如您所见,它并不完美,但这取决于您需要的分辨率。 Image of apple