问题
最近使用tensorflow中的tf.gfile.FastGFile()函数读取jpg文件,总是出现如下错误,貌似是说文件的格式不是jpg格式。但是我看了图片的属性明明是jpg的格式。
解决
想起来我原来的图片类型是tiff格式,为了改成jpg格式,曾写过一段代码,但是该代码只是名称上将tiff格式改成了jpg格式,实际图片的存储形式并没有改变。笔者自己也没有深究究竟存储有什么不同,大概百度了一下貌似是因为dpi有所不同。查看了数据发现,能通过tf.gfile.FastGFile()读取的jpg图片在我这都是96dpi,而那几个名称上是jpg,而实际上为tif的图片却是72dpi。
在matlab中利用imwrite函数可以保存图片,使用格式如下:
imwrite(im ,filepath, 'ext');
其中ext为图片保存的类型,若为jpg格式,则为96dpi,若为tif格式,则为72dpi
后来编写了下列代码,删除了那些tif格式的 图片,重新保存为jpg图片。
clear;
clc;
datadir = 'C:\Users\wyt\Desktop\slim\datasets\data\Sample\ship';
subdir=dir(datadir);
savedir = 'C:\Users\wyt\Desktop\slim\datasets\data\Sample\96dpi';
for i=3:length(subdir)%
imgpath = fullfile(datadir,subdir(i).name); %图片路径
information = imfinfo(imgpath); %图片的相关信息
imgformat = information.Format; %图片格式
k = strcmpi(imgformat,'jpg'); %如果是jpg格式则不用转换
if k==1
continue
end
resolution = information.XResolution; %查看分辨率
if resolution == 72 %tif格式的resolution是72dpi
im = imread(imgpath);
[path, name, ext] = fileparts(imgpath) ;
filename = strcat(name , '.jpg' );
filepath = fullfile(savedir , filename) ;
imwrite(im ,filepath, 'jpg');
delete(imgpath)
fprintf ('当前正在改变%s\n',imgpath)
end
end