爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 3061|回复: 0

[混合编程] IDL之切除图片白边

[复制链接]

新浪微博达人勋

发表于 2019-7-1 14:32:06 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
3.png
IDL画图是默认有白边的,对于contour等作图,可以通过设置position=[0,0,1,1]不留缝隙,但对于image函数制图,这样设置也无法让图片充满界面,比较烦恼。于是我写了个函数,把白边切掉。
代码如下:
-------------------------------------------------------
;IDL输出的图经常有白边,该程序用于剪掉图的规则白边
pro cut_white_margin,figfile
;文件路径:
path=file_dirname(figfile)+'\'
name_Suffix=file_basename(figfile)
cut=strsplit(name_Suffix,'.',/extract)
;后缀:
Suffix=cut[-1]
;文件名(不包括后缀):
name=strjoin(cut[0:-2],'.')
;读取图片:
if(suffix eq 'jpg')then read_jpeg,figfile,ima
if(suffix eq 'png')then read_png,figfile,ima
;图片尺寸:
  sz=size(ima)
  ;列数:
  cols=sz[2]
  ;行数:
  rows=sz[3]
  ;第一层红,第二层绿,第三层蓝:
  r=long(reform(ima[0,*,*],cols,rows))
  g=long(reform(ima[1,*,*],cols,rows))
  b=long(reform(ima[2,*,*],cols,rows))
  ;各层rgb值加起来
  s=r+g+b
  ;寻找白色部分,由于图片是规则矩形,只要判断中心十字线即可
  ;中间横线:
  s1=s[*,fix(rows/2)]
  p1=where(s1 lt 255*3-30,count)
  ;中间竖线:
  s2=s[fix(cols/2),*]
  p2=where(s2 lt 255*3-30,count)
;出去白边的图是:
  pure_ima=ima[*,p1,p2]
;写出该图,覆盖原图
if(suffix eq 'jpg')then write_jpeg,figfile,pure_ima,true=1
if(suffix eq 'png')then write_png,figfile,pure_ima
end

------------------------------------------------------------

一点小缺陷:
IDL存图时边缘会有非常细的过渡带,这细带不好判断是否切去,
但是只要图像素高(IDL自动存的图像素是很高的),影响极小。
飞鸽截图20190701135406.png
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表