关于图片dpi的问题

问题

最近使用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

猜你喜欢

转载自blog.csdn.net/Mr_health/article/details/81210370