Podfusion / OpenCV /image.py
Last commit not found
raw
history blame
4.85 kB
from turtle import ycor
import numpy as np
import png
import cv2
class Image:
def __init__(self, x_pixels=0, y_pixels=0, filename=''):
# you need to input either filename OR x_pixels, y_pixels, and num_channels
self.input_path = 'pyphotoshop-main\input/'
self.output_path = 'pyphotoshop-main\output/'
self.x_pixels = x_pixels
self.y_pixels = y_pixels
self.array = np.zeros((x_pixels, y_pixels))
#Read original image
im=cv2.imread(r"Animate\images\flag (1).png")
#Change to 2D array and canny_edges
canny_edges=cv2.Canny(image=im, threshold1=100, threshold2=200)
manys=np.random.randint(255, size=(5,5))
ones=np.array([[0, 255, 0, 255,0],[ 255, 0, 0, 255, 255],[0, 255, 0, 255, 0],[255, 255, 0, 255, 0],[ 255, 0, 255, 0, 255]])
cv2.imwrite("ones.png",ones)
#Try loop through elements in the image matrice:
#-----------------------------------------------------------------------------------------------------------
#Getting the last key in a dictionary
def get_last_key(dictionary):
for key in dictionary.keys():
last_key=key
return last_key
#Get the coord of the key with the white value/255
def get_white_key(dictionary):
for key,value in dictionary.items():
if value==255:
white_coord=key
return white_coord
# find neighbouring pixel:
def get_neighbours(image, x, y, x_pixels, y_pixels, kernel=0):
neighbour_coords=[
[max(0, (x-1)),max(0,(y-1))],
[max(0, (x-1)),y],
[max(0, (x-1)), min((y_pixels-1),(y+1))],
[x,max(0,y-1)],
[x,min((y_pixels-1),(y+1))],
[min((x_pixels-1),(x+1)),max(0,(y-1))],
[min((x_pixels-1),(x+1)),y],
[min((x_pixels-1),(x+1)),y+1]
] # to finish array kernel....
neighbour_coords=np.array(neighbour_coords)
print(f"Image pixel is : at {x,y} ")
return neighbour_coords
#find value at neighbour
def value_at_neighbour(new_frame,image,coord=[0,0],pixel_count=0):
pixel_count+=1
print(f"Pixel count is at {pixel_count}")
x_pixels, y_pixels=np.shape(image)
neighbour_coords=get_neighbours(image, coord[0], coord[1],x_pixels, y_pixels,kernel=0)
neighbour_values=[]#empty array with shape of nighbour-co-ords array
dict={}
#Run through coords in neighbours coord list and find their values
for coord in neighbour_coords:
neighbour_value = image[min(x_pixels-1,coord[0]),min(y_pixels-1,coord[1])]
neighbour_values.append(neighbour_value)
#Changing values back to normal arrays to work with in dict
pyneighbour_value=int(neighbour_value)
pyz=tuple(coord)
dict[pyz]=pyneighbour_value# append to dictionary of neighbour-co-ords
print(f"My dict of neighbour coords:values is {dict} and value is {pyneighbour_value} ")#At the end of this for loop, we finally get
if pixel_count <25:
if 255 in neighbour_values:
coord=get_white_key(dict)
print(f"\n \n New coordinate in recursive function is {coord} and pixl count{pixel_count}")
#Append dict of neighbours values to new_frame array
for key, value in dict.items():
x_index=int(key[0])
y_index=int(key[1])
new_frame[x_index][y_index]=value
#Convert array with new dict values to np array, then save it a
#list of variables that we can cv.write later
frames[pixel_count]=new_frame
value_at_neighbour(new_frame, image,coord,pixel_count=pixel_count)
#if all the values are black and it breaks out of loop
#We need to check the next square
elif 255 not in neighbour_values:
coord=get_last_key(dict)
print(f"\n \n Value is 0 so new coord is {coord}")
value_at_neighbour(new_frame, image,coord,pixel_count)
#Create and write image with path
#Create an empty imaage of arrays with 0 and switch the 0 with the white values one by one
"""
That is, if neighbour coord is True
If neighbour coord is True, then move to square
Divide square by number of frames
We need it to pick a square
"""
#Initialize frame count
frame_count=0
#So now we have to create a path through the image and create frames
def create_path_frames(frames=10) :
new_frame=np.zeros(5,5)
for i in range(frames): #number of frames
frame_count += 1
cv2.imwrite(f'new{frame_count}.png',new_frame)
new_frame=[[0]*5]*5
frames={}
value_at_neighbour(new_frame, ones)
print(len(frames))
"""
for key, value in frames.items():
frame=np.array(value)
cv2.imwrite(f'frame{key}.png',frame)
"""