关于图片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

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值