2013-08-18 16 views
10

Załóżmy, że przesyłam dwa lub więcej niż dwa zdjęcia w niektórych Framelayout. Niniejszym ładuję trzy zdjęcia z tą samą osobą w trzech różnych pozycjach na wszystkich tych trzech zdjęciach. Następnie, jakie biblioteki przetwarzania obrazu w systemie Android lub Java lub Native są dostępne, aby zrobić coś, jak pokazano na rysunku.jak scalać obrazy i narzucać je sobie nawzajem

Chciałbym nałożyć na siebie wiele zdjęć.

Coś, takie jak: -

Picture with layering facility

Jednym z pomysłów jest:

  1. Czy jakieś uwarstwienie w tych wszystkich zdjęć i znaleźć niedopasowania obszary fotki i połączyć je.

Jak można połączyć wiele zdjęć z innymi? Sprawdzając podobieństwo i łącząc się ze sobą?

Czy są jakieś usługi Api stron trzecich lub niektóre usługi Photoshop, które mogą mi pomóc w tego rodzaju przetwarzania obrazu?

+1

Czy próbowałeś OpenCV. Dla [np.] (Http://stackoverflow.com/questions/11155333/opencv-merging-two-images-using-opencv) –

+0

czy inne obrazy zawierają tylko faceta, czy też tło? jeśli to tylko facet, łatwo to zrobić bez specjalnego interfejsu API. jeśli nie, potrzebujesz czegoś specjalnego ... –

+0

@androiddeveloper: Inne obrazy również mają to samo tło. Muszę znaleźć różnicę między zdjęciami i scalić je. –

Odpowiedz

0

Nie wiem, czy to będzie kwalifikować się w definicji „tubylców”, ale tam jest następujący NET, które mogą pomóc: http://dynamicimage.apphb.com/

Jeśli sama biblioteka może dać chcesz, chcesz, a następnie, w zależności od architektury, możesz skonfigurować małą witrynę ASP.NET do manipulacji obrazem na serwerze.

0

Sprawdź akceptowaną odpowiedź here.

W powyższym łączu jest połączenie dwóch obrazów, które jest wykonywane przez sdk openCV.

Jeśli nie chcesz korzystać z openCV i po prostu chcesz spróbować samemu, to będziesz musiał grać niewiele z framlayout iz trzema obrazami. Podaj opcje dla użytkownika, aby wybrać określoną część obrazu, aby wyświetlić wszystkie trzy obrazy. Zostanie wyświetlona wybrana część wybranego obrazu. w ten sposób otrzymasz wynik jak powyżej, co powiedziałeś.

Mam nadzieję, że masz mój punkt widzenia. Jeśli nie, daj mi znać.

Ciesz kodowanie ... :)

0

można nakładać obrazy wykorzystujące OpenCV można sprawdzić w OpenCV i here lub 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); 

lub można utworzyć go jako watermark effect

Możesz też wypróbować to w java, np. merging two images

spróbuj użyć tego cl tyłek

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

W tym przypadku nie próbujesz po prostu połączyć zdjęć. Naprawdę chcesz połączyć scenę zawierającą ten sam obiekt w różnych pozycjach.

Dlatego nie jest to zwykła kombinacja lub układ alfa, w którym kolor danego piksela na wyjściu jest sumą wartości tego piksela na każdym obrazie, podzielonej przez liczbę obrazów.

W tym przypadku, możesz zrobić:

  1. Ustal tle sceny analizującą piksele, które nie zmieniają się pod uwagę wiele obrazów.
  2. Rozpocznij od obrazu wyjściowego będącego tylko tłem.
  3. Dla każdego obrazu usuń tło, aby uzyskać żądany obiekt i połączyć go z obrazem wyjściowym.

Jest Marvin plug-in, aby wykonać to zadanie, zwane MergePhoto. Poniższy program używa tej wtyczki do łączenia zestawu zdjęć 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(); 
} 
} 

Zdjęcia wejściowe i obraz wyjściowy pokazano poniżej.

enter image description here

+0

Lemme, spróbuj według wskazówek. Sposób, w jaki rozumiesz problem i znaczącą odpowiedź, jest naprawdę nadzieją na promień. –

+0

Jeśli masz problem z uruchomieniem przykładu lub skonfigurowaniem architektury, opublikuj wiadomość w [grupie dyskusyjnej] (https://groups.google.com/forum/#!forum/marvin-project). –

+0

Próbowałem Twojego rozwiązania dokładnie ze zdjęciami, w których jedna osoba siedzi na krześle, a po chwili stoi. Ale obraz wynikowy był rozmazany i po prostu pokazywał miły cień stojącej osoby zamiast samej osoby. Czy musimy wykonać wstępne przetwarzanie obrazów lub coś innego ... aby działało jak pokazano na powyższych zdjęciach ...? – Kailas

Powiązane problemy