2012-05-18 27 views
13

Vì vậy, đối với dự án này tôi đang làm việc, tôi có 2 ảnh. Hai bức ảnh này cần phải được ghép lại với nhau, một ảnh ở trên cùng và một ở phía dưới, và sau đó bạn sẽ có thể thấy toàn bộ bức ảnh. Bất kỳ ý tưởng về những mô-đun tôi nên sử dụng để làm điều này?Ghép ảnh lại với nhau

+1

Họ có trùng lặp như ảnh toàn cảnh không? Hay bạn chỉ cần tạo một hình ảnh lớn hơn bằng cách đặt hai hình ảnh nhỏ hơn bên cạnh nhau? – Leopd

Trả lời

19

python imaging library sẽ ăn nhiệm vụ đó cho bữa sáng.

Xem phần tutorial cụ thể là phần "Cắt, dán và sáp nhập hình ảnh" cho một số trợ giúp có liên quan.

Đối với phác thảo thô, tải cả hình ảnh với Image.open, tìm hiểu làm thế nào lớn hình ảnh đầu ra sẽ bằng size thuộc tính và một số Bên cạnh đó, tạo hình ảnh đầu ra với Image.new và sau đó sử dụng phương pháp paste về quá khứ hai hình ảnh gốc in.

+1

Bạn có thể xây dựng một chút về điều đó không? Giống như những chức năng tôi sẽ sử dụng? Có lời khuyên nào không? –

+5

Tôi đã thêm một số gợi ý cho câu trả lời. Thông thường tôi sẽ viết một chương trình demo nhưng nó đã được một tuần dài và một đồ uống có cồn tốt vẫy gọi ;-) –

+0

Tuyệt vời! Đó là hoàn hảo. Cảm ơn sự giúp đỡ của bạn –

2

Đây là một số mã từ Jan Erik Giải thích tầm nhìn máy tính bằng sách python; bạn có thể chỉnh sửa nó để phù hợp với nhu cầu hàng đầu/dưới cùng của bạn

def stitchImages(im1,im2): 
    '''Takes 2 PIL Images and returns a new image that 
    appends the two images side-by-side. ''' 

    # select the image with the fewest rows and fill in enough empty rows 
    rows1 = im1.shape[0]  
    rows2 = im2.shape[0] 

    if rows1 < rows2: 
     im1 = concatenate((im1,zeros((rows2-rows1,im1.shape[1]))), axis=0) 
    elif rows1 > rows2: 
     im2 = concatenate((im2,zeros((rows1-rows2,im2.shape[1]))), axis=0) 
    # if none of these cases they are equal, no filling needed. 

    return concatenate((im1,im2), axis=1) 
15

Đây là mẫu mã sử dụng Pillow. Hy vọng nó sẽ giúp một ai đó!

from PIL import Image 

def merge_images(file1, file2): 
    """Merge two images into one, displayed side by side 
    :param file1: path to first image file 
    :param file2: path to second image file 
    :return: the merged Image object 
    """ 
    image1 = Image.open(file1) 
    image2 = Image.open(file2) 

    (width1, height1) = image1.size 
    (width2, height2) = image2.size 

    result_width = width1 + width2 
    result_height = max(height1, height2) 

    result = Image.new('RGB', (result_width, result_height)) 
    result.paste(im=image1, box=(0, 0)) 
    result.paste(im=image2, box=(width1, 0)) 
    return result 
+3

mã này hoạt động, tôi vừa thử nghiệm nó ngay bây giờ. Bạn có thể lưu tệp bằng cách sử dụng mã này -> merged = merge_images (file1, file2) merged.save (file_dest) – fedmich

+0

Câu hỏi đặt ra cho một hình ảnh trên đầu trang khác, chỉ là lật các hành động trên result_width với result_height – Ywapom

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