Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将原始数据另存为tif_Python_Image_Matplotlib_Tiff - Fatal编程技术网

Python 将原始数据另存为tif

Python 将原始数据另存为tif,python,image,matplotlib,tiff,Python,Image,Matplotlib,Tiff,我需要分析tif文件中作为子矩阵选择的图像的一部分。我想有原始格式的图像,没有装饰(缩放,轴,标签等)。。。我怎么能这么做 这是我现在使用的代码: submatrix = im[x_min:x_max, y_min:y_max] plt.imshow(submatrix) plt.savefig("subplot_%03i_%03i.tif" % (index, peak_number), format = "tif") 首先,如果您只是想存储原始值或原始值的灰度表示,那么最简单的方法就

我需要分析tif文件中作为子矩阵选择的图像的一部分。我想有原始格式的图像,没有装饰(缩放,轴,标签等)。。。我怎么能这么做

这是我现在使用的代码:

 submatrix = im[x_min:x_max, y_min:y_max]
 plt.imshow(submatrix)
 plt.savefig("subplot_%03i_%03i.tif" % (index, peak_number), format = "tif")

首先,如果您只是想存储原始值或原始值的灰度表示,那么最简单的方法就是使用PIL

例如,这将生成10x10灰度tif文件:

import numpy as np
import Image

data = np.random.randint(0, 255, (10,10)).astype(np.uint8)
im = Image.fromarray(data)
im.save('test.tif')
至于你关于matplotlib版本为什么有更多像素的问题,那是因为你含蓄地告诉它。Matplotlib图形具有大小(以英寸为单位)和dpi(默认情况下,屏幕上显示80,保存时显示100)。此外,默认情况下,
imshow
将对数组中的值进行插值,即使将插值设置为“最近”,保存的图像仍将是您为地物指定的大小

如果要使用matplotlib将图形以一个值保存到一个像素(例如,为了方便使用彩色贴图),请执行类似的操作:

import numpy as np
import matplotlib.pyplot as plt

dpi = 80 # Arbitrary. The number of pixels in the image will always be identical
data = np.random.random((10, 10))

height, width = np.array(data.shape, dtype=float) / dpi

fig = plt.figure(figsize=(width, height), dpi=dpi)
ax = fig.add_axes([0, 0, 1, 1])
ax.axis('off')

ax.imshow(data, interpolation='none')
fig.savefig('test.tif', dpi=dpi)

我想
plt
matplotlib.pyplot
。可能会有一些有用的东西,而不是像Matthew那样重复的感谢。有人知道为什么会有比预期更多的像素吗?我希望每个值有一个像素,在[x_min:x_max,y_min:y_max]范围内,我做了Joe建议的更改,得到了以下错误:高度,宽度=np.array(data.shape,dtype=float)/dpi的“值错误:太多值无法解压缩”。我该换什么?@albus_c-听起来你有一个3d阵列?
data.shape
看起来像什么?如果它是一个3D阵列,你会想做一些类似于高度、宽度、nbands=…@albus_c的事情。此外,如果你处理的是多波段图像,只需直接使用
图像将其保存到tif(也称为“PIL”)。我假设你想根据彩色地图给一幅单波段图像上色(顺便说一句,这也可以用PIL完成,但是构建彩色地图更难)。谢谢你的提示!我很满意我现在得到的彩色图像(我需要它们只是为了检查我考虑的是正确的区域)与枕头(旨在取代PIL),该软件包是安装与
pip安装枕头
和导入与
从PIL导入图像
。您需要将图像转换为0-255范围的uint8格式(如示例中所示),并将单通道图像展平为二维。其余部分与这里的PIL示例相同。