EasyGUI и SimpleCV-TypeError: объект «модуль» не вызывается

Я пытаюсь сделать графический интерфейс для программы simpleCV. Я использую easyGUI для этого. Вот мой код:

from easygui import * 
from SimpleCV import *
from cv2 import *
from cv import *
from PIL import *
import time
import sys
while True:
    msgbox("""Welcome to my program!""", image = "pi.jpg")
    msgbox("Select img ")
    nam=fileopenbox(filetypes=['*'])
    print nam
    img=Image(nam)
    img1=img.binarize()
    time.sleep(1)
    img1.save("result.png")
    msgbox("This is the result", image = "result.png")
    msg = "Do you want to continue?"
    title = "Please Confirm"
    if ccbox(msg, title): # show continue/cancle dialog
        print "okk" # user chose continue  
    else:
        sys.exit(0) # user chose cancle

Но я получаю странную ошибку .. он говорит:

Traceback (most recent call last):
  File "C:\Python27\tryyyy", line 13, in <module>
    img=Image(nam)
TypeError: 'module' object is not callable

Я попробовал распечатать каталог (изображение) и получил:

['АДАПТИВНЫЙ', 'АФФИННЫЙ', 'АНТИАЛЬЯНСИРОВАННЫЙ', 'БИКУБИЧЕСКИЙ', 'БИЛИНЕЙНЫЙ', 'КОНТЕЙНЕР', 'КУБИЧЕСКИЙ', 'ОТЛАДКА', 'РАСШИРЕНИЕ', 'ПРОДОЛЖИТЕЛЬНОСТЬ', 'FLIP_LEFT_RIGHT', 'FLIP_TOP_BOTTOM', ' FLOYDSTEINBERG», «ID», «Изображение», «ImageMode», «ImagePalette», «ImagePointHandler», «ImageTransformHandler», «IntType», «LINEAR», «MESH», «MIME», «MODES», «NEAREST» , 'НЕТ', 'НОРМАЛЬНЫЙ', 'ОТКРЫТЫЙ', 'УПОРЯДОЧЕННЫЙ', 'ПЕРСПЕКТИВА', 'КВАДРАТНЫЙ', 'РАСТЕРИЗОВАТЬ', 'ПОВЕРНУТЬ_180', 'ПОВЕРНУТЬ_270', 'ПОВЕРНУТЬ_90', 'СОХРАНИТЬ', 'ПОСЛЕДОВАТЕЛЬНОСТЬ', ' StringType", "TupleType", "UnicodeStringType", "VERSION", "WEB", "_E", "_ENDIAN", "_ImageCrop", "_MAPMODES", "_MODEINFO", "_MODE_CONV", "встроенные функции', 'документ', 'файл', 'имя', 'пакет', '_conv_type_shape ', '_fromarray_typemap', '_getdecoder', '_getencoder', '_getscaleoffset', '_imaging_not_installed', '_initialized', '_show', '_showxv', '_wedge', 'blend', 'byteorder', 'composite', 'core', 'eval', 'fromarray', 'frombuffer', 'fromstring', 'getmodebandnames', 'getmod ebands», «getmodebase», «getmodetype», «init», «isDirectory», «isImageType», «isNumberType», «isSequenceType», «isStringType», «isTupleType», «объединить», «новый», «открыть» , 'os', 'preinit', 'register_extension', 'register_mime', 'register_open', 'register_save', 'string', 'sys', 'warnings']

Я импортировал SimpleCV; не могли бы вы помочь мне, почему я получаю эту ошибку, пожалуйста? Заранее спасибо.


person Future Engineer    schedule 10.01.2015    source источник
comment
Информация трассировки ясна: изображение — это модуль, что означает, что изображение — это подмодуль модуля, который вы импортируете. попробуйте print dir(Image), чтобы найти что-нибудь полезное.   -  person lqhcpsgbl    schedule 10.01.2015


Ответы (1)


Как упоминал @zoosuck, «Изображение» — это модуль. Это правильно, но проблема не в этом (ПРИМЕЧАНИЕ, я отредактировал этот ответ).

во-первых, могу ли я предложить что-то? Вы пытаетесь написать полную программу сразу. Вместо этого, возможно, попробуйте просто очень простую программу без графического интерфейса и без отображения изображения. Используйте внешний инструмент, такой как «краска», чтобы убедиться, что ваша базовая логика работает правильно. ТОГДА добавьте приятный графический интерфейс и зациклите, как только базовая логика заработает правильно.

Ссылка: Использование Python PIL для преобразования изображения RGB в чистое черно-белое изображение

Хорошо, вернемся к ответу: попробуйте ответить на эти три вопроса:

  1. Что такое изображение? Я не имею в виду то, что вы думаете. Но что это?
  2. От куда это?
  3. Почему это не то, что вы подумали.

Найдите минутку, чтобы попытаться ответить на них. Еще хотел дать небольшой совет по отладке. Если вы вставите эти две строки кода, вы получите перерыв в своем коде, где вы можете «поиграть»:

import code
code.interact(local=dict(globals(), **locals()))

Поместите этот «импорт» в начало вашего файла. Поместите строку 'code.*' в то место, где вы хотите остановиться. Запустите программу как обычно. В операторе code.interact вы увидите >>>. А теперь поиграй! введите print Image или print(Image), попробуйте help(Image). Что вы получаете? Вот что я получил:

>>> Image
<module 'PIL.Image' from 'C:\Python27\lib\site-packages\PIL\Image.pyc'>

Ждать! Он говорит PIL.Image, который НЕ является SimpleCV! Проблема с вашими операторами импорта. Я бы посоветовал вам их поменять. Вы можете делать то, что делаете, но иногда это очень сбивает с толку. Вместо этого измените их на что-то вроде:

import SimpleCV as cv
import PIL as pil

Затем в своем коде всегда говорите, например, «cv.Image». Поскольку вы не были очень конкретными и поскольку PIL перезаписал «Изображение», вы ошиблись. Вместо этого импортируйте, как я сказал выше, и я думаю, что это будет намного менее запутанно. Надеюсь, это поможет!

person Robert Lugg    schedule 10.01.2015
comment
Большое спасибо за ваш ответ. На самом деле, я пытаюсь создать графический интерфейс для программы SimpleCV с помощью easygui. img=Image(nam) img1=img.binarize() time.sleep(1) img1.save(result.png) £.. этот код является тестом, чтобы убедиться, что графический интерфейс будет работать с моим окончательным кодом simplecv. Но я не понял, почему модуль изображения не вызывается, хотя в SimpleCV этот модуль есть. Извините, я новичок. - person Future Engineer; 10.01.2015
comment
нет проблем. Я обновлю свой ответ, чтобы (надеюсь) помочь вам. Пожалуйста, примите мой ответ, поставив зеленую галочку, если считаете это уместным. - person Robert Lugg; 12.01.2015