2013-09-12 4 views
-1

Я использую python и PIL для управления двумя изображениями. Я успешно разместил одно изображение на другом, используя getpixel и putpixel. Нам не разрешено использовать любую функцию копирования/вставки, которую предоставляет pil (следовательно, getpixel и putpixel). Теперь я в основном пытаюсь поместить первое изображение (скажем, изображение шаблона) в определяемое пользователем местоположение целевого изображения. Я знаю, как принимать пользовательский ввод, но я не могу понять, куда помещать эти переменные, чтобы изображение шаблона отображалось в координатах пользователя. Я в основном хочу сделать эти координаты новым источником для изображения шаблона. Я попытался использовать координаты как putpixel x и y, но, я думаю, это просто укладка пикселей друг на друга в координатах пользователя. Я уверен, что это просто, что мне не хватает. Любая помощь будет оценена по достоинству. Кстати, я использую Python 2.7.Обработка изображений на Python - перемещение изображения

from PIL import Image 
import sys 

print "Image Manipulation\n" 

tempImg = Image.open("template.png") 
destImg = Image.open("destination.jpg") 

tempWidth,tempHeight = tempImg.size 
destWidth,destHeight = destImg.size 

if tempWidth >= destWidth and tempHeight >= destHeight: 
    print "Error! The template image is larger than the destination image." 
    sys.exit() 
else: 
    print "The template image width and height: ",tempWidth,tempHeight 
    print "The destination image width and height: ",destWidth,destHeight 

x_loc = raw_input("Enter the X coordinate: ") 
y_loc = raw_input("Enter the Y coordinate: ") 

x_loc = int(x_loc) # <--where do I put these? 
y_loc = int(y_loc) 

tempImg = tempImg.convert("RGBA") 
destImg = destImg.convert("RGBA") 
img = tempImg.load() 

for x in xrange(tempWidth): 
    for y in xrange(tempHeight): 
     if img[x,y][1] > img[x,y][0] + img[x,y][2]: 
      img[x,y] = (255,255,255,0) 
     else: 
      destImg.putpixel((x,y),tempImg.getpixel((x,y))) 


destImg.show() 

ответ

0

Я понял! После многих игр с переменными я понял, где их добавить. Я продолжал пытаться использовать их как координаты x, y функции getpixel, но я знал, что они просто складывают их поверх друг друга в основном, потому что эти переменные не обновляются в цикле.

getpixel((x_loc,y_loc),...) #<--wrong 

Затем он нажал: Я просто должен был добавить координаты пользователя к й и у GetPixel. Например:

getpixel((x+x_loc,y+y_loc),...) #<--Eureka!! 

Это в основном устанавливает начало изображения шаблона во входное местоположение пользователя. Я знаю, что есть другие способы сделать это намного быстрее, но нам было поручено использовать только getpixel, putpixel и open/save изображение. Конечно, здесь я просто показываю изображение, а не сохраняю его. Не стесняйтесь попробовать.

print "Image Manipulation\n" 
template = raw_input("Enter the template image: ") 
destination = raw_input("Enter the destination image: ") 

tempImg = Image.open(template) 
destImg = Image.open(destination) 

tempWidth,tempHeight = tempImg.size 
destWidth,destHeight = destImg.size 

if tempWidth >= destWidth and tempHeight >= destHeight: 
    print "Error! The template image is larger than the destination image." 
    sys.exit() 
else: 
    print "The template image width and height: ",tempWidth,tempHeight 
    print "The destination image width and height: ",destWidth,destHeight 

x_loc = raw_input("Enter the X coordinate: ") 
y_loc = raw_input("Enter the Y coordinate: ") 

x_loc = int(x_loc) 
y_loc = int(y_loc) 

tempImg = tempImg.convert("RGBA") 
destImg = destImg.convert("RGBA") 
img = tempImg.load() 

for x in range(tempWidth): 
    for y in range(tempHeight): 
     if img[x,y][1] > img[x,y][0] + img[x,y][2]: #<-- removes green border from image 
      img[x,y] = (255,255,255,0) 
     else: 
      destImg.putpixel((x+x_loc,y+y_loc),tempImg.getpixel((x,y))) 


destImg.show() 

** Примечание: Эта часть программы не является обязательным:

if img[x,y][1] > img[x,y][0] + img[x,y][2]: 
     img[x,y] = (255,255,255,0) 

Шаблон картина, которую мы получили имеет зеленую рамку вокруг него, и мы попросили, чтобы удалить его, когда мы помещаем его на образ назначения.

Смежные вопросы