我编写了一个python程序,它从粒子探测器获取x,y,c值(c为电荷)并将它们转换为灰度热图图像。该程序产生的一个例子如下。应该显示的是黑色背景上的几个灰白色区域簇,表示与屏幕的粒子碰撞。我知道这是因为我们与粒子探测器一起使用的PIXELMAN程序显示了它的样子,我的程序只是让你在没有探测器插入的情况下完成它。
def heatMap(self):
xlist=[]
ylist=[]
clist=[]
directory = str(self.varRun.get())
if directory == "None selected" :
tkMessageBox.showinfo("ERROR", "No run was selected")
else:
filename = askopenfilename(title = "Choose a new Image to import", initialdir=directory)
if filename[-4:] != ".txt":
tkMessageBox.showinfo("ERROR", "You must select a .txt image")
else:
with open(filename,'r') as f:
reader=csv.reader(f,delimiter='\t')
for x, y, c in reader:
xlist.append(int(x))
ylist.append(int(y))
clist.append(float(c))
#np.meshgrid(xlist,ylist)
maxC = max(clist)
array = np.zeros((256, 256))
for i in range (0, len(xlist)-1):
rgbValue = (float(clist[i]) / float(maxC)) * 255
array[ylist[i],xlist[i]] = rgbValue
array = sp.ndimage.zoom(array, 2, order=0)
imageFromArray = Image.fromarray(array, "1")
imageFromArray.save(str(filename[:-4] + ".png"))
newPhoImg = ImageTk.PhotoImage(imageFromArray)
self.ImageViewer.configure(image=newPhoImg)
self.ImageViewer.image = newPhoImg
请求文件并显示它的例程在上面。任何帮助发现图像不正确形成的原因是值得赞赏的。我已经检查过xlist,ylist和clist都从文本文件中获取了正确的值,我只是不知道那里出了什么问题。输入文件的示例是:
2 0 43.000000
3 0 65.000000
4 0 67.000000
5 0 33.000000
7 0 44.000000
8 0 102.000000
9 0 59.000000
10 0 31.000000
11 0 42.000000
12 0 29.000000
13 0 125.000000
14 0 115.000000
...
247 255 38.000000
显然,这一直持续到y值255
现在解决了这两个问题:
答案 0 :(得分:1)
正如我在评论中提到的,这一行
imageFromArray = Image.fromarray(array, "1")
是可疑的。您正在将浮点数组转换为1位图像(请参阅http://effbot.org/imagingbook/concepts.htm#mode)。
尝试将该行更改为
imageFromArray = Image.fromarray(array).convert('L')
然后imageFromArray
将是一个8位图像,可以保存为PNG文件。