【发布时间】:2016-04-30 10:22:14
【问题描述】:
在 MATLAB 中对 .gif 动画进行一些测试时,我意识到不知何故我无法读取 gif 的透明度。
例子:
如果我这样做了
[img,cmap]=imread('Finnandjake.gif');
img 是 4D,具有冗余的第 3 维(奇怪)。挤压后(img=squeeze(img);),如果我显示它(imshow(img(:,:,30),cmap)):
透明度消失了,使用图像中的另一种颜色作为背景,从而删除了特征。不过
[img,cmap,alpha]=imread('Finnandjake.gif');
返回一个空的alpha。很明显alpha的信息在某处的图像中,我如何在MATLAB中读取它?
【问题讨论】:
-
我认为 matlab 无法管理 .gif 图像的透明度。来自 mathworks.com:
imread(___) additionally returns the image transparency. This syntax applies only to PNG, CUR, and ICO files. -
@obchardon 我注意到了,但是,有没有办法用 alpha 信息将 gif 文件加载到 MATLAB?它只是一个gif文件,它不会那么难
-
我想建议使用 Imagemagick 将 GIF 转换为 PNG 并循环读取 PNG。但我什至无法让 MATLAB 识别 PNG 中的 Alpha 层,尽管它 is 存在于文件中。 :-(
-
@Daniel,但这很奇怪,因为 .gif 的第一帧为透明区域提供 53,最后一帧为 0...没有一致性。因此,对于第一帧,您可以修改 cmap。
cmap(53:end,:) == 1;但是对于最后一帧它不起作用。 -
使用图像进行测试here 似乎表明 Matlab 要么存在错误,要么不支持功能,要么与大多数常见的 GIF 解析器不同。