2016-11-18 2 views
0

Im пытается найти хороший пакет или алгоритм для изменения изображения, чтобы вытолкнуть центр изображения наружу, чтобы имитировать macular degen. Лучший метод, который я нашел, - это пакет image_slicer и разделить изображение на 4 части, надавить на внутренние углы и сшить изображения назад. Но метод соединения пакета не работает, и документация неясна. У кого-нибудь есть пакет, который может это сделать?как манипулировать изображением в python для имитации дегенеративного пятна

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

(для обоих из них я до сих пор пытаюсь сохранить изображение, хотя перекос в порядке, я пытаюсь предотвратить потерю изображения.)

некоторого код, который я написал

import image_slicer 
#split image into 4 pieces 
image_slicer.slice('piegraph.jpeg',4) #just a simple sample img 

#code to resize corners 
#I can figure this out later. 

#stitch images back 
tiles = ("pie_01_01.png","pie_01_02.png","pie_02_01.png","pie_02_02.png") 
image_slicer.join(tiles) 
+0

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

ответ

1

Вы можете использовать opencv и nummpy делать то, что вы хотите.

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

Для всех пикселей внутри «черной дыры» вы хотите быть черным, а все остальные вы хотите, чтобы они были сгруппированы вместе.

Так что, если мы берем исходное изображение, чтобы быть:

Before

Результат вы ищете что-то вроде:

After

В следующей дозы кода этого. Параметры, которые вы должны играть с являются

RBlackHole - радиус вашей черной дыры

ФАКТОР - Изменение количества «гармошки» слишком мал, и все пиксели будут отображаться также черный слишком большой, и они будут не быть сгруппированными.

import cv2 
import numpy as np 
import math 

# Read img 
img = cv2.imread('earth.jpg') 
rows,cols,ch = img.shape 

# Params 
FACTOR = 75 
RBlackHole = 10 

# Create a 2d mapping between the image and a new warp 
smallSize = min(rows,cols) 
xMap = np.zeros((rows,cols), np.float32) 
yMap = np.zeros_like(xMap) 
for i in range(rows): 
    for j in range(cols): 

     # Calculate the distance of the current pixel from the cneter of the image 
     r = math.sqrt((i-rows/2)*(i-rows/2) + (j-cols/2)*(j-cols/2)) 

     # If the pixles are in the radius of the black hole 
     # mapped them to a location outside of the image. 
     if r <= RBlackHole: 
      xMap[i, j] = rows*cols 
      yMap[i, j] = rows*cols 
     else: 

      # Mapped the pixels as a function of the distance from the center. 
      # The further thay are the "buncher thay will be" 
      xMap[i, j] = (r-RBlackHole)*(j - cols/2)/FACTOR + cols/2 
      yMap[i, j] = (r-RBlackHole)*(i - rows/2)/FACTOR + rows/2 



# Applay the remmaping 
dstImg = cv2.remap(img,xMap,yMap,cv2.INTER_CUBIC) 

# Save output image 
cv2.imwrite("blackHoleWorld.jpg", dstImg) 
+0

Спасибо, это действительно хороший пример. Я могу работать с этим. Отличная работа. –

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