I can't load an image from a script
To load an image from disk doesn't require bpy.ops. You could use:

bpy.data.images.load(filepath, check_existing=False)
# Load a new image into the main database

&gt;&gt;&gt; bpy.data.images.load("/home/zeffii/Desktop/some_image.png")
# bpy.data.images['some_image.png']

# if an image exists by that name already, you could set the name
bpy.data.images['some_image.png.001'].name = 'some_image.png'

# check_exist=True will reuse an existing image with that name
&gt;&gt;&gt; bpy.data.images.load("/home/zeffii/Desktop/some_image.png", check_existing=True)


bpy.ops.* are triggered each time you interact in some way with the UI (buttons, shortcuts..). Often the UI triggers a bpy.ops.whatever with  information about which window the event occurred in - this is important because you could have two UV image editors open, or two TextEditors (just an example). Therefor sometimes just calling the ops isn't enough, and some ops even expect a UI which isn't present in background mode.

All these ops eventually operate on lower level bpy database content. So when possible avoid bpy.ops and look through bpy.data to find a more direct route. The auto-complete function of the bpy console is great for finding methods and attributes.