【问题标题】:EasyGUI and SimpleCV- TypeError: 'module' object is not callableEasyGUI 和 SimpleCV-TypeError:“模块”对象不可调用
【发布时间】:2015-01-12 12:11:52
【问题描述】:

我正在尝试为 simpleCV 程序制作 GUI。我正在使用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

我尝试了打印目录(图像),我得到了:

['ADAPTIVE', 'AFFINE', 'ANTIALIAS', 'BICUBIC', 'BILINEAR', 'CONTAINER', 'CUBIC', 'DEBUG', 'EXTENSION', 'EXTENT', 'FLIP_LEFT_RIGHT', 'FLIP_TOP_BOTTOM ','FLOYDSTEINBERG','ID','Image','ImageMode','ImagePalette','ImagePointHandler','ImageTransformHandler','IntType','LINEAR','MESH','MIME','MODES', “最近”、“无”、“正常”、“打开”、“有序”、“透视”、“四边形”、“光栅化”、“ROTATE_180”、“ROTATE_270”、“ROTATE_90”、“保存”、“序列” '、'StringType'、'TupleType'、'UnicodeStringType'、'VERSION'、'WEB'、'_E'、'_ENDIAN'、'_ImageCrop'、'_MAPMODES'、'_MODEINFO'、'_MODE_CONV'、' builtins', 'doc', 'file', 'name', 'package' ,'_conv_type_shape','_fromarray_typemap','_getdecoder','_getencoder','_getscaleoffset','_imaging_not_installed','_initialized','_show','_showxv','_wedge','blend','byteorder','复合','核心','eval','fromarray','frombuffer','fromstring','getmodebandnames','get modebands','getmodebase','getmodetype','init','isDirectory','isImageType','isNumberType','isSequenceType','isStringType','isTupleType','merge','new','open' , 'os', 'preinit', 'register_extension', 'register_mime', 'register_open', 'register_save', 'string', 'sys', 'warnings']

我导入了 SimpleCV;请你帮我解释一下为什么会出现这个错误? 提前谢谢你。

【问题讨论】:

  • 回溯信息很清楚:Image是模块,也就是说Image是你导入的模块的子模块。尝试 print dir(Image) 找到有用的东西。

标签: python-2.7 simplecv easygui


【解决方案1】:

正如@zoosuck 提到的,'Image' 是一个模块。这是正确的,但这不是问题(注意我已经编辑了这个回复)。

首先,我可以提出一些建议吗?您正在尝试一次编写一个完整的程序。相反,也许只尝试一个非常简单的程序,根本没有 GUI,也没有图像显示。使用“paint”之类的外部工具来确认您的基本逻辑功能是否正常。然后,在基本逻辑正常工作后添加漂亮的 GUI 并循环。

参考:Using python PIL to turn a RGB image into a pure black and white image

好的,回到答案:试着回答这三个问题:

  1. 什么是图像?我不是说你认为它是什么。但是,它是什么?
  2. 它来自哪里?
  3. 为什么不是你想象的那样。

花点时间尝试回答这些问题。我还想在调试中提供一个小技巧。如果您插入这两行代码,您的代码中会出现一个中断,您可以在其中“玩耍”:

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

将“导入”放在文件的顶部。将 'code.*' 行放在你想停止的地方。正常运行程序。在 code.interact 语句中,您将看到 >>> 出现。现在,尽情玩耍吧!输入打印图像或打印(图像),尝试帮助(图像)。你得到了什么?这是我得到的:

>>> 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 覆盖了“图像”,所以你弄错了。而是像我上面所说的那样导入,我认为它不会那么混乱。我希望这会有所帮助!

【讨论】:

  • 非常感谢您的回复。事实上,我想做的是使用 easygui 为 SimpleCV 程序制作一个 GUI。 img=Image(nam) img1=img.binarize() time.sleep(1) img1.save("result.png") £.. 此代码是一个测试,以确保 gui 将与我最终的 simplecv 代码一起使用.但我不明白为什么虽然 SimpleCV 有这个模块,但 Image 模块是不可调用的。对不起,我是初学者。
  • 没问题。我会更新我的回复以(希望)对您有所帮助。如果您觉得合适,请使用绿色复选标记“接受”我的回答。
猜你喜欢
  • 2017-06-17
  • 2014-09-21
  • 2011-05-30
  • 2021-11-22
  • 2017-05-08
  • 1970-01-01
相关资源
最近更新 更多