使用matplotlib输出与源文件大小相同的图像文件

时间:2018-08-01 09:58:46

标签: python matplotlib python-imaging-library geotiff

我正在对图像进行一些分析(原始图像格式为geotiff-.tif,并对图像进行了一些计算,并且能够将计算出的像素毫无问题地输出到csv中。但是由于matplotlib限制,仅使用英寸作为图形宽度和高度,我无法将新计算出的图像输出到绘图中,原始地图大小约为7.7k乘7.7k像素,输出图像为3.3k乘3.3k(不带颜色条),以下是我使用的代码生成图

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt    
figure_width_inches = 40
figure_height_inches = 20

img_min = np.nanmin(img)
img_max = np.nanmax(img)
mid = 0

img_fig = plt.figure(figsize=(figure_width_inches, figure_height_inches))
img_ax = img_fig.add_subplot(add_subplot_RPC)

cmap = plt.cm.RdYlGn

img_cax = plt.imshow(img, cmap=cmap, clim=(img_min, img_max))

plt.axis(axis_mode)

img_fig.savefig(img_filename.replace('.jpg', '_notitlenolegend.jpg'), dpi=figure_dpi,
            bbox_inches=figure_bbox_inches, pad_inches=plot_pad_inches)

ax.set_title(img_title, fontsize=axis_title_fontsize, fontweight=axis_title_fontweight)
cbar = img_fig.colorbar(cax, orientation=figure_colourbar_orientation, shrink=figure_colourbar_shrink)
img_fig.savefig(img_filename, dpi=figure_dpi, bbox_inches=figure_bbox_inches, pad_inches=plot_pad_inches)

我需要输出的图像具有与原始图像相似的大小(即7.7k x 7.7k像素),以便进行后期绘图处理。我的挑战是我的源文件来自geotiff,而plt.imread无法打开该文件。我正在考虑将tif文件转换为jpg,以获取plt.imread来打开文件,但我无法将其转换。

source = '~/some_map.tif'

import PIL
import PIL.Image, PIL.ImageFile

img = PIL.Image.open(source)
destination = source.replace('.tif', '_destination.tif')

img.save(destination, "JPEG", quality=10, optimize=True, progressive=True)


...    
IOError: cannot write mode I as JPEG

我可能需要转换单波段geotiff文件的颜色空间以将枕头保存为jpg。但这似乎是一个乏味的解决方法。

-是否有更多的Python方法来解决matplotlib的图像输出大小

修改:

figure_dpi = 100
figure_output_dpi = 1000
img_fig = plt.figure(figsize=(width/float(figure_output_dpi), \
                     height/float(figure_output_dpi)), dpi=figure_dpi)
ax = plt.Axes(img_fig, [0., 0., 1., 1.])
ax.set_axis_off()
img_fig.add_axes(ax)

我设法用此方法生成了我想要的结果,即图的像素与图像源相同。

0 个答案:

没有答案