|
import cv2 |
|
import numpy as np |
|
from PIL import Image |
|
|
|
class pixL: |
|
|
|
def __init__(self,numOfSquaresW = None, numOfSquaresH= None, size = [False, (512,512)],square = 6,ImgH = None,ImgW = None,images = [],background_image = None): |
|
self.images = images |
|
self.size = size |
|
self.ImgH = ImgH |
|
self.ImgW = ImgW |
|
self.square = square |
|
self.numOfSquaresW = numOfSquaresW |
|
self.numOfSquaresH = numOfSquaresH |
|
|
|
def preprocess(self): |
|
for image in self.images: |
|
|
|
size = (image.shape[0] - (image.shape[0] % 4), image.shape[1] - (image.shape[1] % 4)) |
|
image = cv2.resize(image, size) |
|
image = cv2.cvtColor(image.astype(np.uint8), cv2.COLOR_BGR2RGB) |
|
|
|
if len(self.images) == 1: |
|
return self.images[0] |
|
else: |
|
return self.images |
|
|
|
def toThePixL(self,images, pixel_size): |
|
self.images = [] |
|
self.square = pixel_size |
|
for image in images: |
|
image = Image.fromarray(image) |
|
image = image.convert("RGB") |
|
self.ImgW, self.ImgH = image.size |
|
self.images.append(pixL.epicAlgorithm(self, image)) |
|
|
|
return pixL.preprocess(self) |
|
|
|
def numOfSquaresFunc(self): |
|
self.numOfSquaresW = round((self.ImgW / self.square) + 1) |
|
self.numOfSquaresH = round((self.ImgH / self.square) + 1) |
|
|
|
def epicAlgorithm(self, image): |
|
pixValues = [] |
|
pixL.numOfSquaresFunc(self) |
|
|
|
for j in range(1,self.numOfSquaresH): |
|
|
|
for i in range(1,self.numOfSquaresW): |
|
|
|
pixValues.append((image.getpixel(( |
|
i * self.square - self.square//2, |
|
j * self.square - self.square//2)), |
|
(i * self.square - self.square//2, |
|
j * self.square - self.square//2))) |
|
|
|
background = 255 * np.ones(shape=[self.ImgH - self.square, |
|
self.ImgW - self.square*2, 3], |
|
dtype=np.uint8) |
|
|
|
for pen in range(len(pixValues)): |
|
|
|
cv2.rectangle(background, |
|
pt1=(pixValues[pen][1][0] - self.square,pixValues[pen][1][1] - self.square), |
|
pt2=(pixValues[pen][1][0] + self.square,pixValues[pen][1][1] + self.square), |
|
color=(pixValues[pen][0][2],pixValues[pen][0][1],pixValues[pen][0][0]), |
|
thickness=-1) |
|
background = np.array(background).astype(np.uint8) |
|
background = cv2.resize(background, (self.ImgW,self.ImgH), interpolation = cv2.INTER_AREA) |
|
|
|
return background |