Файл Savetxt для свойств изображений в цикле в Python - PullRequest
0 голосов
/ 22 августа 2011

Я создаю программу, которая вычисляет количество пикселей пикселей определенного значения температуры на спутниковом изображении. Я использовал:

for infile in glob.glob(*.tif) 

для открытия всех изображений .tif в цикле. Программа работает нормально, и печатает в терминале имя de и номер пикселя всех изображений. Но когда я использую:

np.savetxt("pixels.txt", (File, pixelstemp1, pixelstemp2), fmt="%1s", delimiter=' ') 

сохраняет только количество пикселей последнего изображения в текстовом файле. Как я могу сделать для сохранения в текстовом файле количество пикселей всех изображений?

from pylab import *

import numpy

import glob, os 


for infile in glob.glob("*04.tif"):
# pretend the rest of this is indented another level

dir, file = os.path.split(infile)
file, ext = os.path.splitext(infile)
sat=imread(infile)
satnovo=where(logical_and((418.-sat)-273.15>=-90,(418.-sat)-273.15<=-31),(418.-sat)-273.15,(660.-sat)/2-273.15)
temperatura=[-80,-70,-60,-50,-40,-30]
mask1=where(logical_and(satnovo<-30,satnovo>-80), 1,0)
mask2=where(logical_and(satnovo<-40 ,satnovo>-80),1,0)
mask3=where(logical_and(satnovo<-50, satnovo>-80),1,0)
mask4=where(logical_and(satnovo<-60, satnovo>-80),1,0)
mask5=where(logical_and(satnovo<-70, satnovo>-80),1,0)
x1=ma.masked_object(mask1,0)
pixels1=ma.count(x1)

x2=ma.masked_object(mask2,0)
pixels2=ma.count(x2)

x3=ma.masked_object(mask3,0)
pixels3=ma.count(x3)

x4=ma.masked_object(mask4,0)
pixels4=ma.count(x4)

x5=ma.masked_object(mask5,0)
pixels5=ma.count(x3)

print infile,pixels1,pixels2,pixels3,pixels4,pixels5
a=np.array([infile,pixels1,pixels2,pixels3,pixels4,pixels5],dtype=object)
np.savetxt("contapixels.txt",a[None],fmt='%1s', delimiter=' ')

1 Ответ

0 голосов
/ 23 августа 2011

Как отмечает agf, в нескольких предоставленных вами строках нет ошибки как таковой, но из вашего описания я думаю, что вы вызываете np.savetxt для каждого изображения? Если это так, вы будете перезаписывать pixels.txt на каждом проходе. Вы хотите сохранить все данные во временном списке и записать их в конце:

pixeldata = []
for infile in glob.glob("*.tif"):
    # Do processing
    pixeldata.append((infile, pixelstemp1, pixelstemp2))
np.savetxt("pixels.txt", pixeldata, fmt="%1s", delimiter=' ')

Или вы можете открыть файл, а затем добавлять к нему каждый проход цикла. Однако тогда вы не можете использовать np.savetxt, поэтому приведенный выше метод, вероятно, лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...