I am trying to use the variables declared in the functions to another function. But when I do so, I'm getting this kind of error:
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'
My code is:
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)
Even after return(feature_matrix_db, resizelist)
its giving the same error. Is there any way to resolve this? Or do I need to change my code. Everything I have initialized. Every required header is being called/ imported.
Thanks in advance!
So from http://effbot.org/imagingbook/image.htm
Image.open(file) ⇒ image
Image.open(file, mode) ⇒ image
Opens and identifies the given image file. This is a lazy operation; the function reads the file header, but the actual image data is not read from the file until you try to process the data (call the load method to force loading). If the mode argument is given, it must be “r”.
You can use either a string (representing the filename) or a file object as the file argument. In the latter case, the file object must implement read, seek, and tell methods, and be opened in binary mode.
from PIL import Image im = Image.open("lenna.jpg") from PIL import image from StringIO import StringIO
read data from string im = Image.open(StringIO(data))
As the documentation says, the argument passed to Image.open
must implement read
,seek
and tell
methods. You are passing a numpy array generated by OpenCv, when it is expecting a filename, StringIO instance or file object.
I think you can replace the offending Image.open
call with Image.fromarray
and this will take the numpy array as input. i.e.:
im = Image.fromarray(resizelist[val])
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With