title: Global name 'img' is not defined?
body: <p>I'm new programming interfaces. I'm creating a simple interface with wxpython and openCV to open an image, save it and close the interface. You can see my code below. I can open an image and close the interface. Even, I show dialog boxes for the opening and saving routines but saving is where I have problems. I don't know how to send to OnSave the img (image object) to be saved. This is not clear to me. Can you help me? Thanks in advance.</p>
  
  <pre><code>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, '&amp;Open', 'Open a new document')
      file.Append(102, '&amp;Save', 'Save the document')
      file.AppendSeparator()
      quit = wx.MenuItem(file, 105, '&amp;Quit\tCtrl+Q', 'Quit the Application')
      file.AppendItem(quit)
  
      menubar.Append(file, '&amp;File')
      menubar.Append(edit, '&amp;Edit')
      menubar.Append(help, '&amp;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()
  </code></pre>
  
  <p>I get the following error:</p>
  
  <p>NameError: global name 'img' is not defined</p>
  
  <p>EDIT (final version):</p>
  
  <pre><code>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, '&amp;Open', 'Open a new document')
      file.Append(102, '&amp;Save', 'Save the document')
      file.AppendSeparator()
      quit = wx.MenuItem(file, 105, '&amp;Quit\tCtrl+Q', 'Quit the Application')
      file.AppendItem(quit)
  
      menubar.Append(file, '&amp;File')
      menubar.Append(edit, '&amp;Edit')
      menubar.Append(help, '&amp;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()
  </code></pre>