2013-08-18 40 views
10

Giả sử tôi đang tải lên hai hoặc nhiều hơn hai bức ảnh trong một số Framelayout. Bằng cách này tôi đang tải lên ba bức ảnh với cùng một người ở ba vị trí khác nhau trong tất cả ba hình ảnh đó. Sau đó, các thư viện xử lý hình ảnh nào trong Android hoặc java hoặc Native có sẵn để thực hiện điều gì đó như được hiển thị trong pic.cách hợp nhất Hình ảnh và áp đặt lên nhau

Tôi muốn áp đặt nhiều ảnh lên nhau.

Something như thế này: -

Picture with layering facility

Một ý tưởng là:

  1. Do một số lớp ở tất cả những hình ảnh và tìm thấy khu vực mismatching trong các bức ảnh và kết hợp chúng.

Làm cách nào để hợp nhất nhiều ảnh với nhau? Bằng cách kiểm tra sự tương tự và hợp nhất với nhau?

Có dịch vụ nào của Bên thứ ba hoặc một số dịch vụ Photoshop có thể giúp tôi thực hiện các xử lý hình ảnh này không?

+1

Bạn đã thử OpenCV chưa. Đối với [ví dụ] (http://stackoverflow.com/questions/11155333/opencv-merging-two-images-using-opencv) –

+0

là những hình ảnh khác chỉ bao gồm anh chàng, hay cả nền? nếu đó chỉ là anh chàng, thật dễ dàng để làm mà không cần bất kỳ API đặc biệt nào. nếu không, bạn sẽ cần một cái gì đó đặc biệt ... –

+0

@androiddeveloper: Các hình ảnh khác cũng bao gồm cùng một nền. Tôi cần phải tìm sự khác biệt giữa các bức ảnh và hợp nhất chúng. –

Trả lời

0

Tôi không biết nếu điều này sẽ đủ điều kiện để được định nghĩa của bạn về "bản địa", nhưng có thư viện .NET sau có thể giúp: http://dynamicimage.apphb.com/

Nếu thư viện chính nó có thể cung cấp cho bạn muốn bạn muốn, sau đó tùy thuộc vào kiến ​​trúc của bạn, bạn có thể thiết lập một trang ASP.NET nhỏ để thực hiện thao tác hình ảnh trên máy chủ.

0

Kiểm tra câu trả lời được chấp nhận here.

Trong liên kết ở trên có sự hợp nhất hai hình ảnh được thực hiện bởi sdC openCV.

Nếu bạn không muốn sử dụng openCV và chỉ muốn thử với bản thân bạn thì bạn sẽ phải chơi ít với framlayout và với ba lần xem hình ảnh. Cung cấp tùy chọn cho người dùng để chọn một phần cụ thể của hình ảnh để hiển thị cho cả ba hình ảnh. Vì vậy, phần được chọn sẽ được hiển thị của hình ảnh được chọn. theo cách này bạn sẽ nhận được kết quả như trên những gì bạn đã nói.

Hy vọng bạn có quan điểm của mình. Nếu không thì hãy cho tôi biết.

Thưởng thức mã hóa ... :)

0

Bạn có thể che phủ những hình ảnh sử dụng OpenCV bạn có thể kiểm tra tại OpenCVhere hoặc 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); 

hoặc bạn có thể tạo ra nó như là một watermark effect

Hoặc bạn có thể dùng thử trong java như merging two images

thử dùng nhóm này 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

Trong trường hợp này, bạn không chỉ cố gắng kết hợp hình ảnh. Bạn thực sự muốn kết hợp một cảnh chứa cùng một đối tượng ở các vị trí khác nhau.Vì vậy, nó không chỉ là một sự kết hợp đơn giản hoặc một kết hợp alpha mà màu của một điểm ảnh nhất định trong hình ảnh đầu ra là tổng giá trị của điểm ảnh này trong mỗi hình ảnh, chia cho số lượng hình ảnh.

Trong trường hợp này, bạn có thể làm:

  1. Xác định nền cảnh phân tích các điểm ảnh mà không làm thay đổi cân nhắc nhiều hình ảnh.
  2. Bắt đầu với hình ảnh đầu ra chỉ là nền.
  3. Đối với mỗi hình ảnh, hãy xóa nền để lấy đối tượng mong muốn và kết hợp nó với hình ảnh đầu ra.

Có một trình cắm thêm Marvin để thực hiện tác vụ này, được gọi là MergePhoto. Chương trình bên dưới sử dụng trình cắm đó để kết hợp một bộ ảnh 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(); 
} 
} 

Hình ảnh đầu vào và hình ảnh đầu ra được hiển thị bên dưới.

enter image description here

+0

Hãy thử dùng thử theo hướng dẫn của bạn. Cách bạn hiểu vấn đề và phản ứng đáng kể thực sự là một hy vọng của tia. –

+0

Nếu bạn gặp bất kỳ sự cố nào khi chạy ví dụ hoặc định cấu hình khung, hãy đăng thông báo lên [nhóm thảo luận] (https://groups.google.com/forum/#!forum/marvin-project). –

+0

Tôi đã thử giải pháp của bạn chính xác với hình ảnh trong đó người duy nhất đang ngồi trên ghế và trong giây ông đang đứng. Nhưng hình ảnh kết quả bị mờ và nó chỉ thể hiện bóng dáng của người đứng thay vì bản thân người đó. Chúng ta có cần phải làm bất kỳ tiền xử lý nào của hình ảnh hay thứ gì đó khác .. để làm cho nó hoạt động như trong các bức ảnh trên ...? – Kailas

Các vấn đề liên quan