我想在python連鎖反應應用於圖像。 ? 我發現枕頭的im.transform(im.size,Image.MESH,......是有可能 也許我必須加載與numpy的圖像和應用算法 我也發現了這一點:http://www.pygame.org/project-Water+Ripples-1239-.htmlPython的圖像失真
。
手動另一種方式,但我不知道任何的算法,這是我的開始並不做任何事情......
#!/usr/bin/env python3
from PIL import Image
import sys
import numpy
import math
im = Image.open(sys.argv[1])
im.show()
matrix = numpy.asarray(im)
width = im.size[0]
height = im.size[1]
amplitude = ? # parameters
frequency = ?
matrix_dest = numpy.zeros((im.size[0],im.size[1],3))
for x in range(0, width):
for y in range(0, height):
pass # ç_ç
im2 = Image.fromarray(numpy.uint8(matrix_dest))
im2.show()
編輯:
我真的很想保持這種結構(使用枕頭。我已經在我的項目extensivly使用,如果我可以,我不會添加任何其他依賴性),但不包括scipi或matplotlib .. 用下面的代碼我有我想要的失真,但顏色都搞砸了。 也許我必須將失真施加到R,G,B平面然後撰寫的結果在一個圖像。 或者palettize的圖像,然後運用原始的調色板。
(順便說一句圖像將被用作紋理顯示在3D環境中流動的水。)
im = Image.open(sys.argv[1])
im.show()
m = numpy.asarray(im)
m2 = numpy.zeros((im.size[0],im.size[1],3))
width = im.size[0]
height = im.size[1]
A = m.shape[0]/3.0
w = 1.0/m.shape[1]
shift = lambda x: A * numpy.sin(2.0*numpy.pi*x * w)
for i in range(m.shape[0]):
print(int(shift(i)))
m2[:,i] = numpy.roll(m[:,i], int(shift(i)))
im2 = Image.fromarray(numpy.uint8(m2))
im2.show()