在Python中,使用openCV显示图像并使用Tkinter创建单独的窗口会导致崩溃

时间:2015-04-08 01:24:48

标签: python opencv tkinter

我正在尝试使用Python脚本做两件事:

对于所有图像/图像标题对:

  • 通过cv2.imshow(...)
  • 显示图片
  • 通过tkinter tk.Text(self.root)
  • 在可以编辑的窗口中显示图像标题

但是,这会导致崩溃。或者至少...... 通常导致它崩溃(它输出一堆奇怪的错误然后python [或ipython,取决于我正在使用的]退出)。这些错误的形式如下:

Python[50566:37729544] *** Terminating app due to uncaught exception NSInvalidArgumentException', reason: '-[NSApplication _setup:]: unrecognized selector sent to instance 0x7fb960319cc0'

如果我不使用openCV显示图像,我可以废除这些错误。我怀疑它与cv2.imshow和Tk之间的交互有关,或者我的Tk代码编写得有多糟糕,但即使这个荒谬的hacky工作花了很长时间才能生成。我不确定是不是因为我是白痴,但是Tk文档似乎非常复杂(即使是关于Tk的简单问题似乎也有这种形式的答案:“当然你可以做到这一点!但这完全不可能给你一个快速的答案;首先,你必须仔细阅读关于如何进行回调,切换和行话的变幻莫测的文件,以及我以前从未听过的和Tk这样的话。玩得开心!“)。

为可编辑标题生成窗口的代码是这样的。我确信它在使用Tk时违反了许多原则:

class editcap():
    # allows editing of the captions
    def __init__(self, caption):
        self.precap = caption
    def get(self):
        self.caption = self.text.get("1.0",tk.END)
        self.root.destroy()
    def getesc(self, event):
        self.caption = event.widget.get("1.0",tk.END)
        self.root.destroy()
    def disp(self):
        self.root = tk.Tk() # it crashes here 
        self.text = tk.Text(self.root)
        self.text.insert(tk.INSERT, self.precap)
        self.text.pack()
        submit = tk.Button(self.root, text ="Submit", command = self.get)
        submit.pack(side = tk.BOTTOM)
        self.text.bind('<Escape>', self.getesc)
        self.root.mainloop()
        return self.caption

通过opencv显示图像

def display_img(post):
    img = get_image(post) # saves the image from web if it hasn't already been saved, load via plt.imread()
    if resample_to != None:
        wxr = resample_to * 1. / img.shape[1]
        hx = img.shape[0] * wxr
        img = cv2.resize(cv2.cvtColor(img, cv2.COLOR_RGB2BGR), (resample_to, int(hx)))
    cv2.imshow('img',img)

0 个答案:

没有答案