varios detalles
verificá que la ruta al archivo de imagen sea correcta.
según tu código, debés tener creado en el documento un div de id="capa", ya que es en ese elemento dónde hacés el appendChild()
si vas a definir en forma explicita el nombte del elemento al cual agregar la imagen
Código:
var div = document.getElementById("capa");
carece de sentido que tu función reciba un argumento (div)
Si ves el cuadradito que mencionás, lo más probable es que la ruta sea incorrecta.
El src ya que es una propiedad de la imagen podés definirlo también como
Código:
imagen.src = "ruta/libro.jpg";
en lugar de utilizar setAttribute()
Saludos