Масштабирование части изображения

Я хочу увеличить часть изображения, в этом примере, нос.

У меня есть функция для выбора части изображения, которую я хочу увеличить.

def copyAndPaste(picture): height = getHeight(picture) width = getWidth(picture) newPicture = makeEmptyPicture(width, height) for x in range(width): for y in range(height): pxl = getPixel(picture,x,y) if (x>48 and x<59) and (y>58 and y<71): newPxl =getPixel(newPicture, #?,#?) else: newPxl = getPixel(newPicture, x,y) color = getColor(pxl) setColor(newPxl,color) return newPicture def d(): f=pickAFile() picture=makePicture(f) newPicture = copyAndPaste(picture) writePictureTo(newPicture, r"D:\FOLDER\0Pic4.jpg") explore (newPicture) 

Копировать нос пасты

У меня также есть функция, чтобы увеличить изображение:

 def Enlarge(picture): height = getHeight(picture) width = getWidth(picture) newPicture = makeEmptyPicture(width*2, height*2) x1=0 for x in range(0,width): y1=0 for y in range(0,height): pxl = getPixel(picture,x,y) newPxl = getPixel(newPicture, x1,y1) color = getColor(pxl) setColor(newPxl,color) y1=y1+2 x1=x1+2 return newPicture 

например.
Из:

Оригинальная фотография

Для того, чтобы:

Увеличенное изображение

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

Это то, что должно получиться в результате картины (как это смешно)

увеличенный нос

Я тренируюсь на небольших изображениях, так как программа может занять так много времени, что на этом этапе невозможно работать с большими изображениями, что означает, что результаты являются отрывочными, но, по крайней мере, покажут, работает ли это.

2 Solutions collect form web for “Масштабирование части изображения”

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

Таким образом, в середине лица будет нос 10×10, плюс 20×20 размытый нос в правом нижнем углу.


Во-первых, чтобы скопировать и вставить, вам просто нужно скопировать пиксели в старые и новые позиции, а не только в новую позицию:

 def copyAndPaste(picture): height = getHeight(picture) width = getWidth(picture) newPicture = makeEmptyPicture(width+100, height+100) for x in range(width): for y in range(height): pxl = getPixel(picture,x,y) color = getColor(pxl) if (x>48 and x<59) and (y>58 and y<71): newPxl =getPixel(newPicture, x+100,y+100) setColor(newPxl,color) newPxl = getPixel(newPicture, x,y) setColor(newPxl,color) 

Теперь, чтобы увеличить недавно вставленную копию, вам просто нужно удвоить смещение. Другими словами, первый пиксел при 49,59 переходит в 149,159, но пиксель при 50,60 переходит в 151,161, а пиксель на 51,61 равен 153,163 и так далее.

Итак, вы хотите получить расстояние от 49,59, удвоить его, добавить обратно в 49,59, а затем переместить его на 100 100:

  if (x>48 and x<59) and (y>58 and y<71): newPxl =getPixel(newPicture, (x-49)*2+49+100,(y-59)*2+59+100) setColor(newPxl,color) 

Это просто для записи и для удовольствия, а не для ответа …

Но как упоминалось abarnert ( "Are you sure they just want you to leave 3 white pixels for every copied pixel, rather than copying the same pixel 4 times?" ), Что довольно смешно, как алгоритм масштабирования …

Еще более интересным, но основным подходом к масштабированию изображения является Nearest Neighbor Algorithm .

 def EnlargeNearestNeighbor(picture, multiplier): w1 = getWidth(picture) h1 = getHeight(picture) w2 = getWidth(picture) * multiplier h2 = getHeight(picture) * multiplier x_ratio = w1/float(w2) y_ratio = h1/float(h2) newPicture = makeEmptyPicture(w2, h2) for x in range(0, w2): for y in range(0, h2): newPx = getPixel(newPicture, x, y) px = floor(x*x_ratio); py = floor(y*y_ratio); oldPx = getPixel(picture, int(px), int(py)) setColor(newPx, getColor(oldPx)) return newPicture file = pickAFile() picture = makePicture(file) pic = EnlargeEagle(picture) pic2 = EnlargeNearestNeighbor(picture, 3) 


…………………………………. введите описание изображения здесь …………………………………… введите описание изображения здесь …………………………………….


Другие интересные алгоритмы здесь .


Вот базовая реализация Eagle Algorithm (отлично работает с изображениями с низким количеством разных цветов):

 def EnlargeEagle(picture): w = getWidth(picture) h = getHeight(picture) w2 = getWidth(picture)*2 h2 = getHeight(picture)*2 newPicture = makeEmptyPicture(w2, h2) x2 = 0 for x in range(1, w-1): y2 = 0 for y in range(1, h-1): oldPxS = getPixel(picture, x-1, y-1) oldPxT = getPixel(picture, x, y-1) oldPxU = getPixel(picture, x+1, y-1) oldPxV = getPixel(picture, x-1, y) oldPxC = getPixel(picture, x, y) oldPxW = getPixel(picture, x+1, y) oldPxX = getPixel(picture, x-1, y+1) oldPxY = getPixel(picture, x, y+1) oldPxZ = getPixel(picture, x+1, y+1) newPx1 = getPixel(newPicture, x2, y2) newPx2 = getPixel(newPicture, x2+1, y2) newPx3 = getPixel(newPicture, x2, y2+1) newPx4 = getPixel(newPicture, x2+1, y2+1) # Step 1 c = getColor(oldPxC) setColor(newPx1, c) setColor(newPx2, c) setColor(newPx3, c) setColor(newPx4, c) # Step 2 if (getColor(oldPxV) == getColor(oldPxS)) and (getColor(oldPxS) == getColor(oldPxT)): setColor(newPx1, getColor(oldPxS)) if (getColor(oldPxT) == getColor(oldPxU)) and (getColor(oldPxU) == getColor(oldPxW)): setColor(newPx2, getColor(oldPxU)) if (getColor(oldPxV) == getColor(oldPxX)) and (getColor(oldPxX) == getColor(oldPxY)): setColor(newPx3, getColor(oldPxX)) if (getColor(oldPxW) == getColor(oldPxZ)) and (getColor(oldPxZ) == getColor(oldPxY)): setColor(newPx4, getColor(oldPxZ)) y2 += 2 x2 += 2 

Оригинал:

введите описание изображения здесь

Ближайший сосед:

введите описание изображения здесь

Eagle:

введите описание изображения здесь


Наслаждайтесь!

  • Вызов Python из Java-кода с использованием ошибки Jython: ImportError: нет модуля с именем nltk
  • Использование скрипта Python в Java (Eclipse)
  • Обновление Jython с версии 2.2.1 до версии 2.5.2, возможные риски
  • Распространение моих скриптов Python в виде файлов JAR с помощью Jython?
  • Использование Jython из плагина Eclipse
  • Msgstr "sys-package-mgr *: невозможно создать каталог кеша dir" при запуске скрипта python с Jython
  • Переименование файлов, Python / Jython
  • SyntaxError "нет жизнеспособной альтернативы при вводе" я "
  • Python - лучший язык программирования в мире.