Mesh silhouette as a polygon or pixels surrounded by the silhouette on the rendered image?
You can use object index to identify to which object does the pixel belongs to, for this you have to :


assign unique object index to each object
enable the object index pass in the render layer


after that you can output this read the corresponding object for each point from this pass



in the following script we assign unique object index for each object and store this index and name in a dictionary :

import bpy

index = 0
obj_index = dict()

for obj in bpy.context.scene.objects :
    if obj.type == 'MESH' :
        index += 1
        obj.pass_index = index
        obj_index[obj.name] = index

print(obj_index)




this part is for extracting the object index pass from the node viewer image :

# division by 4 since we have RGBA
# object index is contained in any of R, G, B values
l = len(bpy.data.images['Viewer Node'].pixels)//4
table = [0 for x in range(l)] 
pixels = bpy.data.images['Viewer Node'].pixels
for i in range(l):
    table[i] = int(pixels[i*4])

print(table[:])


to make this work you have to setup the composition nodes as this :