Cómo fusionar imágenes e imponerse unas a otras

Supongamos que estoy subiendo dos o más de dos fotos en algún Framelayout . Por lo tanto estoy subiendo tres fotos con una misma persona en tres posiciones diferentes en todas esas tres imágenes. Entonces qué librerías de procesamiento de imágenes en Android o java o Native están disponibles para hacer algo como se muestra en la imagen.

Me gustaría imponer imágenes múltiples entre sí.

Algo como esto: –

Imagen con instalación de capas

Una idea es:

  1. Hacer algunas capas en todas esas imágenes y encontrar las áreas de desajuste en las fotos y combinarlas.

¿Cómo se puede combinar múltiples imágenes con otras? ¿Comprobando la similitud y fusionándose entre sí?

¿Hay algún Api de terceros o algún servicio de Photoshop que pueda ayudarme a hacer este tipo de procesamiento de imágenes?

En este caso, no sólo intenta combinar las imágenes. Realmente desea combinar una escena que contiene el mismo objeto en diferentes posiciones.

Por lo tanto, no es sólo una combinación simple o una compositve alfa donde el color de un píxel dado en la imagen de salida es la suma del valor de este píxel en cada imagen, dividido por el número de imágenes.

En este caso, usted puede hacer:

  1. Determine el fondo de escena analizando los píxeles que no cambian teniendo en cuenta múltiples imágenes.
  2. Comience con la imagen de salida que es sólo el fondo.
  3. Para cada imagen, elimine el fondo para obtener el objeto deseado y compártalo con la imagen de salida.

Hay un plugin de Marvin para realizar esta tarea, llamada MergePhoto. El programa a continuación usa ese plug-in para combinar un conjunto de fotos de parkour.

 import marvin.image.MarvinImage; import marvin.io.MarvinImageIO; import marvin.plugin.MarvinImagePlugin; import marvin.util.MarvinPluginLoader; public class MergePhotosApp { public MergePhotosApp(){ // 1. load images 01.jpg, 02.jpg, ..., 05.jpg into a List List<MarvinImage> images = new ArrayList<MarvinImage>(); for(int i=1; i<=5; i++){ images.add(MarvinImageIO.loadImage("./res/0"+i+".jpg")); } // 2. Load plug-in and process the image MarvinImagePlugin merge = MarvinPluginLoader.loadImagePlugin("org.marvinproject.image.combine.mergePhotos"); merge.setAttribute("threshold", 38); // 3. Process the image list and save the output MarvinImage output = images.get(0).clone(); merge.process(images, output); MarvinImageIO.saveImage(output, "./res/merge_output.jpg"); } public static void main(String[] args) { new MergePhotosApp(); } } 

Las imágenes de entrada y la imagen de salida se muestran a continuación.

Introduzca aquí la descripción de la imagen

No sé si esto calificará para ser en su definición de "nativos", pero hay la biblioteca siguiente de .NET que podría ayudar: http://dynamicimage.apphb.com/

Si la biblioteca en sí puede dar que desea que desee, a continuación, dependiendo de su arquitectura podría configurar un pequeño sitio ASP.NET para hacer la manipulación de imágenes en el servidor.

Compruebe la respuesta aceptada aquí .

En el enlace anterior existe la fusión de dos imágenes que se realiza mediante openCV sdk.

Si no quieres usar openCV y solo quieres probar con tu auto entonces tendrás que jugar poco con framlayout y con tres imageview. Dar opciones al usuario para seleccionar una parte específica de la imagen para mostrar para las tres imágenes. Así se mostrará la parte seleccionada de la imagen seleccionada. De esta manera obtendrás el resultado como arriba de lo que has dicho.

Espero que tengas mi punto. Si no, entonces hágamelo saber.

Disfruta de la codificación … 🙂

Puedes superponer las imágenes con openCV que puedes comprobar en OpenCV y aquí o aquí

 // Read the main background image cv::Mat image= cv::imread("Background.png"); // Read the mans character image to be placed cv::Mat character= cv::imread("character.png"); // define where you want to place the image cv::Mat newImage; //The 10,10 are the initial coordinates in pixels newImage= image(cv::Rect(10,10,character.cols,character.rows)); // add it to the background, The 1 is the aplha values cv::addWeighted(newImage,1,character,1,0,newImage); // show result cv::namedWindow("with character"); cv::imshow("with character",image); //Write Image cv::imwrite("output.png", newImage); 

O puede crearlo como un efecto de filigrana

O puedes probarlo en java como fusionar dos imágenes

Trate de usar esta clase

 public class MergeImages { public static void main(String[] args) { File inner = new File("Inner.png"); File outter = new File("Outter.png"); try { BufferedImage biInner = ImageIO.read(inner); BufferedImage biOutter = ImageIO.read(outter); System.out.println(biInner); System.out.println(biOutter); Graphics2D g = biOutter.createGraphics(); g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.8f)); int x = (biOutter.getWidth() - biInner.getWidth()) / 2; int y = (biOutter.getHeight() - biInner.getHeight()) / 2; System.out.println(x + "x" + y); g.drawImage(biInner, x, y, null); g.dispose(); ImageIO.write(biOutter, "PNG", new File("Outter.png")); } catch (Exception e) { e.printStackTrace(); } } } 
  • Efectos de imagen para Android?
  • ¿Cómo puedo trabajar con Android EffectFactory Class?
  • Android: creación de un mapa de bits con contenido de SurfaceView
  • Detección de objetos Android OpenCV
  • Calcular la relación de aspecto de la imagen de destino Transformar perspectiva
  • ¿Es posible cortar un mapa de bits a piezas pequeñas sin cargar toda la cosa en la memoria?
  • OpenCV - Java: función inRange
  • OpenCV para Android - NativeCameraView todavía existe?
  • Detección de imágenes en paralelo y vista previa de la cámara OpenCV Android
  • Android - Cómo aplicar diffenernt Efectos de imagen en mapa de bits como sepia, blanco y negro, desenfoque, etc
  • OpenCV para ANDROID comparar imagen
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.