我试图将函数中声明的变量用于另一个函数。但是当我这样做时,我遇到了这样的错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\HP\AppData\Local\Enthought\Canopy32\App\appdata\canopy-1.0.3.1262.win-x86\lib\lib-tk\Tkinter.py", line 1410, in __call__
return self.func(*args)
File "D:\6th sem\Major project\Code\frame.py", line 198, in result
im = Image.open(resizelist[val])
File "E:\Canopy\System\lib\site-packages\PIL\Image.py", line 1956, in open
prefix = fp.read(16)
AttributeError: 'numpy.ndarray' object has no attribute 'read'
我的代码是:
def messageWindow():
win = Toplevel()
path = 'C:\Users\HP\Desktop\dataset'
COLUMNS = 12
image_count = 0
for infile in glob.glob(os.path.join(path, '*.jpg')):
image_count += 1
r, c = divmod(image_count, COLUMNS)
im = Image.open(infile)
resized = im.resize((100, 100), Image.ANTIALIAS)
tkimage = ImageTk.PhotoImage(resized)
myvar = Label(win, image=tkimage)
myvar.image = tkimage
myvar.grid(row=r, column=c)
i=0
cont_list = list()
ene_list = list()
homo_list = list()
cor_list = list()
dis_list = list()
B_mean = list()
G_mean = list()
R_mean = list()
piclist = list()
graylist = list()
resizelist = list()
eq_graylist = list()
for infile in glob.glob(os.path.join(path,'*.jpg')):
imge = cv2.imread(infile)
arr = array(imge)
piclist.append(imge)
g_img = cv2.imread(infile,0)
gray_re_img = cv2.resize(g_img,(256,256))
graylist.append(gray_re_img)
equ = cv2.equalizeHist(gray_re_img)
eq_graylist.append(equ)
re_img = cv2.resize(imge,(256,256))
resizelist.append(imge)
i = i + 1
for infiles in glob.glob(os.path.join(path,'*.jpg')):
img = cv2.imread(infiles)
blue, green, red = cv2.split(img)
total = img.size
B = sum(blue) / total
G = sum(green) / total
R = sum(red) / total
B_mean.append(B)
G_mean.append(G)
R_mean.append(R)
im = skimage.io.imread(infile, as_grey=True)
im = skimage.img_as_ubyte(im)
im /= 32
g = skimage.feature.greycomatrix(im, [1], [0], levels=8, symmetric=False, normed=True)
cont = skimage.feature.greycoprops(g, 'contrast')[0][0]
cont_list.append(cont)
ene = skimage.feature.greycoprops(g, 'energy')[0][0]
ene_list.append(ene)
homo = skimage.feature.greycoprops(g, 'homogeneity')[0][0]
homo_list.append(homo)
cor = skimage.feature.greycoprops(g, 'correlation')[0][0]
cor_list.append(cor)
dis = skimage.feature.greycoprops(g, 'dissimilarity')[0][0]
dis_list.append(dis)
feature_matrix_db = zip( B_mean , G_mean , R_mean, cont_list , ene_list , homo_list , cor_list, dis_list)
blue2.set(B_mean)
green2.set(G_mean)
red2.set(R_mean)
con2.set(cont_list)
ene2.set(ene_list)
homo2.set(homo_list)
corr2.set(cor_list)
diss2.set(dis_list)
return(feature_matrix_db,resizelist)
def OPEN():
path=tkFileDialog.askopenfilename(filetypes=[("Image File",'.jpg')])
custName.set(path)
im = Image.open(path)
resized = im.resize((200, 200),Image.ANTIALIAS)
tkimage = ImageTk.PhotoImage(resized)
myvar=Label(root,image = tkimage)
myvar.image = tkimage
myvar.pack()
myvar.place(x = 30, y = 100)
graylist1 = list()
resizelist1 = list()
eq_graylist1 = list()
cont_list1 = list()
ene_list1 = list()
homo_list1 = list()
cor_list1 = list()
B_mean1 = list()
G_mean1 = list()
R_mean1 = list()
dis_list1 = list()
imge = cv2.imread(path)
arr = array(imge)
g_img = cv2.imread(path,0)
gray_re_img = cv2.resize(g_img,(256,256))
graylist1.append(gray_re_img)
equ = cv2.equalizeHist(gray_re_img)
eq_graylist1.append(equ)
re_img = cv2.resize(imge,(256,256))
resizelist1.append(re_img)
blue, green, red = cv2.split(re_img)
total = re_img.size
B = sum(blue) / total
G = sum(green) / total
R = sum(red) / total
B_mean1.append(B)
G_mean1.append(G)
R_mean1.append(R)
im = skimage.io.imread(path, as_grey=True)
im = skimage.img_as_ubyte(im)
im /= 32
g = skimage.feature.greycomatrix(im, [1], [0], levels=8, symmetric=False, normed=True)
cont = skimage.feature.greycoprops(g, 'contrast')[0][0]
cont_list1.append(cont)
ene = skimage.feature.greycoprops(g, 'energy')[0][0]
ene_list1.append(ene)
homo = skimage.feature.greycoprops(g, 'homogeneity')[0][0]
homo_list1.append(homo)
cor = skimage.feature.greycoprops(g, 'correlation')[0][0]
cor_list1.append(cor)
dis = skimage.feature.greycoprops(g, 'dissimilarity')[0][0]
dis_list1.append(dis)
feature_matrix_ip = zip( B_mean1 , G_mean1 , R_mean1, cont_list1 , ene_list1 , homo_list1 , cor_list1 , dis_list1)
blue1.set(B_mean1)
green1.set(G_mean1)
red1.set(R_mean1)
con1.set(cont_list1)
ene1.set(ene_list1)
homo1.set(homo_list1)
corr1.set(cor_list1)
diss1.set(dis_list1)
return(feature_matrix_ip)
def result():
COLUMNS = 12
image_count = 0
resultlist_key = []
result_list = list()
i = 0
a_list = list()
b_list = list()
a_list.append(feature_matrix_ip)
while i < 70:
b_list.append(feature_matrix_db[i])
dist = distance.euclidean(a_list,b_list[i])
result_list.append(dist)
resultlist_key = OrderedDict(sorted(enumerate(result_list),key=lambda x: x[0])).keys()
i = i + 1
res_lst_srt = {'values': result_list,'keys':resultlist_key}
res_lst_srt['values'], res_lst_srt['keys'] = zip(*sorted(zip(res_lst_srt['values'], res_lst_srt['keys'])))
key = res_lst_srt['keys']
for i1,val in enumerate(key):
if i1 < 4:
image_count += 1
r, c = divmod(image_count, COLUMNS)
im = Image.open(resizelist[val]) # <---- This is where the error is coming
tkimage = ImageTk.PhotoImage(resized)
myvar = Label(win, image=tkimage)
myvar.image = tkimage
myvar.grid(row=r, column=c)
即使return(feature_matrix_db, resizelist)
出现同样的错误。有什么方法可以解决这个问题吗?或者我需要更改我的代码。我已经初始化的一切。正在调用/导入每个必需的标题。
提前致谢!
答案 0 :(得分:5)
所以来自http://effbot.org/imagingbook/image.htm
Image.open(文件)⇒图像
Image.open(文件,模式)⇒图像
打开并识别给定的图像文件。这是一个懒惰的操作; 该函数读取文件头,但实际的图像数据不是 从文件中读取,直到您尝试处理数据(调用负载 强制装载的方法)。如果给出mode参数,则必须是 “R”。
您可以使用字符串(表示文件名)或文件 object作为文件参数。在后一种情况下,文件对象必须 实现read,seek和tell方法,并以二进制模式打开。
来自PIL导入的来自PIL导入的图像im = Image.open(&#34; lenna.jpg&#34;) 来自StringIO的图像导入StringIO
从字符串im = Image.open(StringIO(data))
中读取数据
正如文档所述,传递给Image.open
的参数必须实现read
,seek
和tell
方法。您正在传递由OpenCv生成的numpy数组,当它需要文件名,StringIO实例或文件对象时。
我认为您可以使用Image.open
替换有问题的Image.fromarray
调用,这会将numpy数组作为输入。即:
im = Image.fromarray(resizelist[val])