gpt4 book ai didi

python - 全局名称 'img' 未定义?

转载 作者:行者123 更新时间:2023-12-02 17:50:38 24 4
gpt4 key购买 nike

我是新的编程接口(interface)。我正在使用 wxpython 和 openCV 创建一个简单的界面来打开图像,保存并关闭界面。你可以在下面看到我的代码。我可以打开图像并关闭界面。甚至,我显示了打开和保存例程的对话框,但保存是我遇到问题的地方。我不知道如何将要保存的 img(图像对象)发送到 OnSave。这对我来说不是很清楚。你能帮助我吗?提前致谢。

import wx
import cv2

class MyMenu(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, wx.Size(200, 150))
menubar = wx.MenuBar()
file = wx.Menu()
edit = wx.Menu()
help = wx.Menu()
file.Append(101, '&Open', 'Open a new document')
file.Append(102, '&Save', 'Save the document')
file.AppendSeparator()
quit = wx.MenuItem(file, 105, '&Quit\tCtrl+Q', 'Quit the Application')
file.AppendItem(quit)

menubar.Append(file, '&File')
menubar.Append(edit, '&Edit')
menubar.Append(help, '&Help')

self.SetMenuBar(menubar)
self.CreateStatusBar()

self.Bind(wx.EVT_MENU, self.OnOpen, id=101)
self.Bind(wx.EVT_MENU, self.OnSave, id=102)
self.Bind(wx.EVT_MENU, self.OnQuit, id=105)

def OnOpen(self, event):
openFileDialog = wx.FileDialog(self, "Open", "", "",
"PNG files (*.png)|*.png|BMP files (*.bmp)|*.bmp",
wx.FD_OPEN | wx.FD_FILE_MUST_EXIST)
openFileDialog.ShowModal()
path = openFileDialog.GetPath()
openFileDialog.Destroy()
img = cv2.imread(str(path))
cv2.imshow('img', img)
return img

def OnSave(self, event):
saveFileDialog = wx.FileDialog(self, "Save As", "", "",
"PNG files (*.png)|*.png|BMP files (*.bmp)|*.bmp",
wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)
saveFileDialog.ShowModal()
path_save = saveFileDialog.GetPath()
print path_save
saveFileDialog.Destroy()
cv2.imwrite(str(path_save), img)

def OnQuit(self, event):
self.Close()

class MyApp(wx.App):
def OnInit(self):
frame = MyMenu(None, -1, 'menu1.py')
frame.Show(True)
return True

app = MyApp(0)
app.MainLoop()

我收到以下错误:

NameError:未定义全局名称“img”

编辑(最终版本):
import wx
import cv2
import numpy as np


class MyMenu(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, wx.Size(200, 150))
img = np.array([0])
menubar = wx.MenuBar()
file = wx.Menu()
edit = wx.Menu()
help = wx.Menu()
file.Append(101, '&Open', 'Open a new document')
file.Append(102, '&Save', 'Save the document')
file.AppendSeparator()
quit = wx.MenuItem(file, 105, '&Quit\tCtrl+Q', 'Quit the Application')
file.AppendItem(quit)

menubar.Append(file, '&File')
menubar.Append(edit, '&Edit')
menubar.Append(help, '&Help')

self.SetMenuBar(menubar)
self.CreateStatusBar()

self.Bind(wx.EVT_MENU, self.OnOpen, id=101)
self.Bind(wx.EVT_MENU, self.OnSave, id=102)
self.Bind(wx.EVT_MENU, self.OnQuit, id=105)

def OnOpen(self, event):
openFileDialog = wx.FileDialog(self, "Open", "", "",
"PNG files (*.png)|*.png|BMP files (*.bmp)|*.bmp",
wx.FD_OPEN | wx.FD_FILE_MUST_EXIST)
openFileDialog.ShowModal()
path = openFileDialog.GetPath()
openFileDialog.Destroy()
self.img = cv2.imread(str(path))
cv2.imshow('img', self.img)

def OnSave(self, event):
saveFileDialog = wx.FileDialog(self, "Save As", "", "",
"PNG files (*.png)|*.png|BMP files (*.bmp)|*.bmp",
wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)
saveFileDialog.ShowModal()
path_save = saveFileDialog.GetPath()
print path_save
saveFileDialog.Destroy()
cv2.imwrite(str(path_save), self.img)

def OnQuit(self, event):
self.Close()


class MyApp(wx.App):
def OnInit(self):
frame = MyMenu(None, -1, 'menu1.py')
frame.Show(True)
return True

app = MyApp(0)
app.MainLoop()

最佳答案

看它你的意思是img用于OnSave ,如果你看,img未在范围内定义,也未在全局范围内定义。

关于python - 全局名称 'img' 未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22386397/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com