我试图将128x128像素的numpy数组保存到灰度图像中.我只是认为pyplot.imsave函数可以完成这项工作,但事实并非如此,它以某种方式将我的数组转换为RGB图像.我试图在转换过程中将色彩映射强制为灰色,但即使保存的图像以灰度显示,它仍然具有128x128x4维度.这是我编写的代码示例,用于显示行为:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as mplimg
from matplotlib import cm
x_tot = 10e-3
nx = 128
x = np.arange(-x_tot/2, x_tot/2, x_tot/nx)
[X, Y] = np.meshgrid(x,x)
R = np.sqrt(X**2 + Y**2)
diam = 5e-3
I = np.exp(-2*(2*R/diam)**4)
plt.figure()
plt.imshow(I, extent = [-x_tot/2, x_tot/2, -x_tot/2, x_tot/2])
print I.shape
plt.imsave('image.png', I)
I2 = plt.imread('image.png')
print I2.shape
mplimg.imsave('image2.png',np.uint8(I), cmap = cm.gray)
testImg = plt.imread('image2.png')
print testImg.shape
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,"打印"功能的结果是(128,128,4).
任何人都可以解释为什么imsave函数创建那些维度尽管我的输入数组是亮度类型?当然,有没有人有解决方案将阵列保存为标准灰度格式?
谢谢!
这是我在Effbot网站上找到的一个小代码示例,它接近我想要在我的一个程序中执行的操作:
from Tkinter import *
fen =Tk()
class test_Tk_class:
def __init__(self):
self.var = IntVar()
c = Checkbutton(
fen, text="Enable Tab",
variable=self.var,
command=self.cb)
c.pack()
def cb(self,event):
print "variable is", self.var.get()
a = test_Tk_class()
fen.mainloop()
Run Code Online (Sandbox Code Playgroud)
但是这段代码不起作用.回调函数cb不起作用,因为它需要2个参数而没有给出.你如何指定event参数?
所以我又回到了另一个愚蠢的问题。考虑这段代码
x = linspace(-10,10,100);
[X,Y]=meshgrid(x,x)
g = np.exp(-(square(X)+square(Y))/2)
plt.imshow(g)
scat = plt.scatter(50,50,c='r',marker='+')
Run Code Online (Sandbox Code Playgroud)
有没有办法只清除图形上的散点而不清除所有图像?事实上,我正在编写一个代码,其中散点的外观与 Tkinter Checkbutton 绑定,我希望它在单击/取消单击按钮时出现/消失。
谢谢你的帮助!
我有一个包含多个表单的应用程序。其中两个非常相似,它们具有共同的 VCL 对象(标签、图像等)形式的特征,我将其命名为相同的。我想在特定类中有一个函数,它可以接受这两个 Form 之一作为参数,以便修改它们共有的参数。我遇到的解决方案似乎不起作用。
由于我的应用程序非常大且复杂,我使用一个小示例复制了该问题。首先,下面是我的 MainForm 的一个例子:
以及一个子表单的示例(它们都以类似的方式排列)
我有一个额外的类,用于填写子表单上的编辑。这个类的代码如下:
#pragma hdrstop
#include "master_class.h"
#include "sub_Form2.h"
#include "sub_Form3.h"
#include "sub_Form4.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
Master::Master(void)
{
}
Master::~Master(void)
{
}
void Master::WriteToForm(TForm* Form)
{
TForm2* curForm = static_cast<TForm2*>(Form);
TForm3* self = dynamic_cast<TForm3*>(Form);
TForm2* self2 = dynamic_cast<TForm2*>(Form);
if (self != NULL && self2 == NULL) {
TForm3* curForm = static_cast<TForm3*>(Form);
}
else if (self == NULL && self2 != NULL) {
TForm2* curForm = static_cast<TForm2*>(Form);
}
curForm -> Edit1 -> Text = …Run Code Online (Sandbox Code Playgroud) python ×3
matplotlib ×2
arrays ×1
c++ ×1
c++builder ×1
events ×1
image ×1
numpy ×1
tkinter ×1
vcl ×1