you can use this code snippet. Its not perfectly coded, but it gets the first background image from the active camera and create some compositor nodes, to make the camera background visible in rendering.
import bpy
import sys
# general settings
bpy.context.scene.render.film_transparent = True
bpy.context.scene.use_nodes = True
compositor = bpy.context.scene.node_tree
#get background image struct
active_cam = bpy.context.scene.camera.name
bg_images = bpy.data.objects[active_cam].data.background_images.items()
# get background image data, if it exists in struct
try:
image = bg_images[0][1].image
image_scale = bg_images[0][1].scale
except:
sys.exit("No Background Found")
# create new compositor node, if it not already exists
node_names = {"bg_image_node":"CompositorNodeImage", "alpha_over_node":"CompositorNodeAlphaOver", "frame_method_node":"CompositorNodeScale", "scale_node":"CompositorNodeScale"}
current_nodes = compositor.nodes.keys()
for name,type in node_names.items():
if name not in current_nodes:
node = compositor.nodes.new(type=type)
node.name = name
#edit compositor nodes
bg_image_node = compositor.nodes["bg_image_node"]
bg_image_node.image = image
alpha_over_node = compositor.nodes["alpha_over_node"]
alpha_over_node.location[0] = 600
frame_method_node = compositor.nodes["frame_method_node"]
frame_method_node.space = "RENDER_SIZE"
frame_method_node.location[0] = 200
scale_node = compositor.nodes["scale_node"]
scale_node.inputs[1].default_value = image_scale
scale_node.inputs[2].default_value = image_scale
scale_node.location[0] = 400
#link compositor nodes
compositor.links.new(compositor.nodes["Render Layers"].outputs[0], alpha_over_node.inputs[2])
compositor.links.new(bg_image_node.outputs[0], frame_method_node.inputs[0])
compositor.links.new(frame_method_node.outputs[0], scale_node.inputs[0])
compositor.links.new(scale_node.outputs[0], alpha_over_node.inputs[1])
compositor.links.new(alpha_over_node.outputs[0], compositor.nodes["Composite"].inputs[0])