- 积分
- 3638
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2014-10-21
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
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自动存的图像素是很高的),影响极小。
|
|