#for img import, export
from skimage.io import imread, imsave
#for quick img array manipulation
import numpy as np
#to convert array of img's to a gif
import moviepy.editor as mpy
def image_effect_nxn(image):
'''quick output survey to find an effect worth pursuing
image is the file location of an image
'''
#Load the image, get some feedback info
img = imread(image, dtype=int)
print image
print img.shape
print np.max(img)
print img[0:5,0:5,0]
#img^2, the effect sequence I settled on
img = imread(image, dtype=int)
img = img * img
sN = image[:-4] + '_base' + image[-4:]
imsave(sN, img)
#img^3, next layer in the sequence
img = imread(image, dtype=int)
triple = img * img * img
sN = image[:-4] + '_triple' + image[-4:]
imsave(sN, triple)
#img^4, using the power notation
#which we'll use below in an incrementing for loop
img = imread(image, dtype=int)
quad = np.power(img,4)
sN = image[:-4] + '_quad' + image[-4:]
imsave(sN, quad)
#mod 255 often gives a contour line effect
#not utilized any further than this
img = imread(image, dtype=int)
modImg = np.mod(img,255)
#modImg = np.mod(img*img,255) #sim to img*img
sN = image[:-4] + '_mod' + image[-4:]
imsave(sN, modImg)
#img^2 yields values as high as 255*255
#color only goes to 255
#so this forces color range down
#it added no value
img = np.array(img, dtype=float)
img = img/np.max(img)*255
#img = img/np.max(img)*255 #sim to img*img
img = np.array(img, dtype=int)
sN = image[:-4] + '_normalized' + image[-4:]
imsave(sN, img)
#another unused attempt to modulate (reduce)
#the effect of the power function
img = imread(image, dtype=int)
ten = img * img / 10
sN = image[:-4] + '_ten' + image[-4:]
imsave(sN, ten)
#corresponding to the img printout at the start
#this scrolled down as I added sub-routines above
#providing feedback for each step
print img.shape
print np.max(img)
print img[0:5,0:5,0]
Raw Image In
img = img
Base Effect
img*img
Triple
img*img*img
Quad Four
np.power(img,4)
Mod 255
np.mod(img,255)
(ultimately not used)
Normalized
img/np.max(img)*255
(hardly a compelling effect)
Ten
img * img / 10
(ultimately not used)
def nxn(image):
'''returns a pixelated gif and intermediate jpg images
given an image location address in
'''
#loads the image
img = imread(image, dtype=int)
p = [] #array to save intermediate results
#main loop in which increasingly pixelated (higher power)
#image is saved to file and added to array p
for n in range(2,6):
pI = np.power(img,n)
sN = image[:-4] + '_power_' + str(n) + image[-4:]
imsave(sN, pI)
p.append(pI)
#uncomment if the end gif is desired to reverse at the end
#(useful in many cases but not this one, IMO)
#per above p contains [2,3,4,5] or locations 0,1,2,3
#so adding locations 2,1 to end yields values [2,3,4,5,4,3]
#for n in [2,1]:
# p.append(p[n])
#save the gif using the moviepy editor library
sN = image[:-4] + '_powerGIF.gif'
clip = mpy.ImageSequenceClip(p, fps=5)
clip.write_gif(sN)
2
np.power(img,2)
3
np.power(img,3)
4
np.power(img,4)
5
np.power(img,5)
Which Brings Us Back to the Start
Power 2-5, GiF'd
np.power(img,1.0/2)
np.power(img,1.0/3)
np.power(img,1.0/4)
np.power(img,1.0/5)
np.power(img,1.0/6)
np.power(img,1.0/7)