File size: 2,482 Bytes
1e4d453
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43562ba
1e4d453
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43562ba
1e4d453
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import cv2
import numpy as np
from PIL import Image

class pixL:
  #Author: Alican Akca
  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