2013-08-18 14 views
10

Supponiamo che stia caricando due o più di due foto in alcuni Framelayout. Con la presente sto caricando tre foto con una stessa persona in tre diverse posizioni in tutte e tre le immagini. Quindi quali librerie di elaborazione immagini in Android o java o Native sono disponibili per fare qualcosa come mostrato nella foto.come unire Immagini e imporre a vicenda

Vorrei imporre più immagini l'una sull'altra.

Qualcosa di simile a questi: -

Picture with layering facility

Un'idea è quella di:

  1. fare qualche stratificazione in tutte quelle immagini e trovare aree mismatching, in foto e unirli.

Come si può unire più immagini con altre? Controllando la di-somiglianza e fondersi l'un l'altro?

Esistono Api di terzi o alcuni servizi di Photoshop che possono aiutarmi a eseguire questi tipi di elaborazione delle immagini?

+1

Hai provato OpenCV. Per [ad es.] (Http://stackoverflow.com/questions/11155333/opencv-merging-two-images-using-opencv) –

+0

le altre immagini includono solo il ragazzo o anche lo sfondo? se è solo il ragazzo, è facile da fare senza alcuna API speciale. in caso contrario, avresti bisogno di qualcosa di speciale ... –

+0

@androiddeveloper: Altre immagini includono anche lo stesso sfondo. Devo trovare la differenza tra le immagini e unirle. –

risposta

0

Non so se questo sarà qualificarsi per essere nella tua definizione di "nativi", ma non v'è la seguente libreria .NET che potrebbe aiutare: http://dynamicimage.apphb.com/

Se la libreria stessa può dare si vuole si voglio, quindi, a seconda della tua architettura, potresti configurare un piccolo sito ASP.NET per manipolare le immagini sul server.

0

Verificare la risposta accettata here.

Nel collegamento sopra c'è unione di due immagini che è fatto da openCV sdk.

Se non vuoi usare openCV e vuoi semplicemente provare con te stesso, allora dovrai giocare poco con framlayout e con tre imageview. Fornisci all'utente le opzioni per selezionare una parte specifica dell'immagine da mostrare per tutte e tre le immagini. Quindi la parte selezionata verrà mostrata sull'immagine selezionata. in questo modo otterrai il risultato come sopra quello che hai detto.

Spero che tu abbia capito il mio punto. Altrimenti, fammi sapere.

Godetevi la codifica ... :)

0

È possibile sovrapporre le immagini utilizzando OpenCV è possibile controllare al OpenCV e here o here

// 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); 

oppure è possibile creare come un watermark effect

Oppure puoi provarlo in java come merging two images

prova usando questo cl ass

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(); 
    } 

} 
} 
6

In questo caso non si sta solo cercando di combinare le immagini. Vuoi davvero combinare una scena contenente lo stesso oggetto in diverse posizioni.

Pertanto, non è solo una semplice combinazione o una composizione alfa in cui il colore di un dato pixel nell'immagine di uscita è la somma del valore di questo pixel in ogni immagine, diviso per il numero di immagini.

In questo caso, si potrebbe fare:

  1. Determinare la scena di sfondo analizzando i pixel che non cambiano considerando più immagini.
  2. Iniziare con l'immagine di uscita che è solo lo sfondo.
  3. Per ogni immagine, rimuovere lo sfondo per ottenere l'oggetto desiderato e combinarlo con l'immagine di output.

Per eseguire questa operazione è necessario un plug-in Marvin, denominato MergePhoto. Il programma in basso usa quel plug-in per combinare una serie di foto 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(); 
} 
} 

Le immagini di ingresso e l'immagine di uscita sono mostrate di seguito.

+0

Lemme provalo secondo le tue indicazioni. Il modo in cui tu capisci il problema e la risposta significativa è davvero una speranza di raggio. –

+0

In caso di problemi nell'esecuzione dell'esempio o nella configurazione del framework, inserire un messaggio nel [gruppo di discussione] (https://groups.google.com/forum/#!forum/marvin-project). –

+0

Ho provato la tua soluzione esattamente con le foto in cui una persona è seduta su una sedia e in seconda è in piedi. Ma l'immagine risultante era sfocata e stava solo mostrando un'ombra gentile di persona in piedi invece che di persona stessa. Abbiamo bisogno di fare qualsiasi pre-elaborazione di immagini o qualcos'altro ... per farlo funzionare come mostrato nelle foto sopra ...? – Kailas

Problemi correlati