File size: 1,837 Bytes
6b82a67
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import numpy as np
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
import matplotlib.pyplot as plt
import matplotlib.patches as patches

LINEWIDTH = 2
EDGECOLOR = 'r'

class MemePlotter:
    def __init__(self):
        pass

    def plot(self, input_img, similar_img, input_img_crop_coords, show=False, save_path=None):
        similar_img_crop_coords = similar_img.bbox
        similar_img_parent = similar_img.load_parent()
        fig, (ax1, ax2) = plt.subplots(1, 2)
        fig.subplots_adjust(top=0.8, bottom=0.1)
        ax1.imshow(similar_img_parent)
        ax2.imshow(input_img)
        radius1 = (similar_img_crop_coords[2] - similar_img_crop_coords[0]) / 2
        rect1 = patches.Circle(((similar_img_crop_coords[0] + similar_img_crop_coords[2]) / 2, 
                            (similar_img_crop_coords[1] + similar_img_crop_coords[3]) / 2), 
                            radius1, linewidth=LINEWIDTH, edgecolor=EDGECOLOR, facecolor='none')
        ax1.add_patch(rect1)
        
        radius2 = (input_img_crop_coords[2] - input_img_crop_coords[0]) / 2
        rect2 = patches.Circle(((input_img_crop_coords[0] + input_img_crop_coords[2]) / 2, 
                            (input_img_crop_coords[1] + input_img_crop_coords[3]) / 2),
                            radius2, linewidth=LINEWIDTH, edgecolor=EDGECOLOR, facecolor='none')
        ax2.add_patch(rect2)

        ax1.axis('off')
        ax2.axis('off')
        fig.suptitle('Is It Really Worth It?', fontsize=20, weight='bold')
        if save_path:
            plt.savefig(save_path)
            plt.close()
        if show:
            plt.show()
        canvas = FigureCanvas(fig)
        canvas.draw()
        img = np.frombuffer(canvas.tostring_rgb(), dtype='uint8').reshape(canvas.get_width_height()[::-1] + (3,))
        return img