2013-08-18 7 views
10

Предположим, что я загружаю два или более двух фото в Framelayout. Настоящим я загружаю три фото с одним и тем же человеком в трех разных положениях на всех этих трех картинках. Тогда какие библиотеки обработки изображений в Android или Java или Native's могут сделать что-то, как показано на рис.Как объединить изображения и накладывать друг на друга

Я хотел бы наложить несколько изображений друг на друга.

что-то вроде этих: -

Picture with layering facility

Одна идея состоит в том, чтобы:

  1. Есть некоторые наслоения во всех этих фотографий и найти не соответствующие области в фотографии и объединить их.

Как можно объединить несколько изображений с другими? Проверяя ди-сходство и сливаясь друг с другом?

Есть ли какой-либо сторонний сервис Api или какой-либо Photoshop, который может помочь мне в выполнении этой обработки изображений?

+1

Вы пробовали OpenCV. Для [например.] (Http://stackoverflow.com/questions/11155333/opencv-merging-two-images-using-opencv) –

+0

- другие изображения включают только парня или фона? если это просто парень, легко обойтись без специального API. если нет, вам понадобится что-то особенное ... –

+0

@androiddeveloper: Другие изображения также включают один и тот же фон. Мне нужно найти разницу между фотографиями и слить их. –

ответ

0

Я не знаю, будет ли это право быть в вашем определении «туземцев», но есть следующие библиотеки .NET, которые могут помочь: http://dynamicimage.apphb.com/

Если сама библиотека может дать вам хочу, чтобы вы хотите, тогда в зависимости от вашей архитектуры вы можете настроить небольшой сайт ASP.NET для обработки изображений на сервере.

0

Проверьте принятый ответ here.

В приведенной выше ссылке происходит слияние двух изображений, которое выполняется openCV sdk.

Если вы не хотите использовать openCV и просто хотите попробовать самостоятельно, вам придется немного поиграть с framlayout и с тремя изображениями. Дайте возможность пользователю выбрать определенную часть изображения для показа всех трех изображений. Таким образом, выбранная часть будет показана на выбранном изображении. таким образом вы получите результат, как указано выше.

Надеюсь, вы поняли мою точку зрения. Если нет, то дайте мне знать.

Наслаждайтесь кодирования ... :)

0

Вы можете наложить изображения с помощью OpenCV вы можете проверить на OpenCV и here или 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); 

или вы можете создать его как watermark effect

Или вы можете попробовать его в java как merging two images

попробуйте использовать этот cl задница

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

В этом случае вы не просто пытаетесь объединить изображения. Вы действительно хотите объединить сцену, содержащую один и тот же объект, в разных положениях.

Таким образом, это не просто комбинация или альфа-композит, где цвет данного пикселя в выходном изображении представляет собой сумму значения этого пикселя в каждом изображении, деленное на количество изображений.

В этом случае, вы можете сделать:

  1. Определение фона сцены, анализируя пиксели, которые не изменяются с учетом нескольких изображений.
  2. Начните с выходного изображения, являющегося только фоном.
  3. Для каждого изображения удалите фон, чтобы получить желаемый объект, и объедините его с выходным изображением.

Для выполнения этой задачи используется плагин Marvin, называемый MergePhoto. В приведенной ниже программе этот плагин объединяет набор паркурных фотографий.

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

Вводные изображения и выходные изображения показаны ниже.

enter image description here

+0

Lemme дайте ему попробовать в соответствии с вашим руководством. То, как вы понимаете проблему и значительный ответ, действительно является надеждой на луч. –

+0

Если у вас возникли проблемы с запуском примера или настройкой фреймворка, опубликуйте сообщение в [группе обсуждения] (https://groups.google.com/forum/#!forum/marvin-project). –

+0

Я пробовал ваше решение именно с фотографиями, в которых один человек сидит на стуле, а во втором он стоит. Но образ изображения был размытым, и он просто показывал добрую тень стоящего человека, а не самого человека. Нужно ли делать какие-либо предварительные обработки изображений или что-то еще ... чтобы они работали, как показано на приведенных выше рисунках ...? – Kailas