Создание приложения для блокировки изображений в python - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь создать два приложения, одно из которых загружает изображение, пикселирует его так, что одно не видит деталей изображения, а другое переставляет пиксели, чтобы можно было видеть содержимое изображения.

Чтобы пикселировать изображение, я использую этот код:

import PIL
from PIL import Image
from matplotlib import pyplot as plt
import os
import numpy as np
import cv2
import random
import time
import mahotas as mh
print("Enter Image name")
#x = input()
x = "test.jpg"
image = cv2.imread(x)
x,y,z = image.shape
temp_img = np.copy(image, order='K')
number_poolx = list(range(0,x))
tracker = {}

for dim1 in range(x):
    number_pooly = list(range(0,y))
    if len(number_poolx) > 1:
        randintx = random.randint(0,len(number_poolx)-1)
        rerange_indexX = number_poolx.pop(randintx)
    else:
        randintx = 0
        rerange_indexX = number_poolx.pop(randintx)
    for dim2 in range(y):
        if len(number_pooly) > 1:
            randinty = random.randint(0,len(number_pooly)-1)
            rerange_indexY = number_pooly.pop(randinty)
        else:
            #print(number_pooly)
            randinty = 0
            rerange_indexY = number_pooly.pop(randinty)
        for dim3 in range(z):
            image[dim1][dim2][dim3] = temp_img[rerange_indexX][rerange_indexY][dim3]
            string_old = str(dim1) +"," + str(dim2) + "," + str(dim3)
            string_new = str(rerange_indexX) +"," + str(rerange_indexY) + "," + str(dim3)
            tracker[string_old] = string_new


# write mapping to file
file = open("mapping.txt", "w")
#counter = 0
for key, value in tracker.items():
    string_temp = str(key) +" : " + str(value) + "\n"
    file.write(string_temp)
#    print(key, ' : ', value)
file.close()
mh.imsave('lockedpic.jpg', image)
plt.imshow(image)
plt.show()

Итак, что я сделал, так это скопировал изображение, получил случайный индекс изображения и переставил значения индекса (и впоследствии удалите этот индекс, чтобы я переставлял только индексы) и, наконец, отслеживайте каждую перестановку с помощью трекера словаря (который позже создает файл отображения). Этот код отлично работает с точки зрения пикселизации изображения.

С моей второй программой я хотел прочитать в сопоставлении и восстановить изображение.

import PIL
from PIL import Image
from matplotlib import pyplot as plt
import os
import numpy as np
import cv2
import random
import time
import mahotas as mh
x = "lockedpic.jpg"
image = cv2.imread(x)
x,y,z = image.shape
tracker = {}

#Read in mapping
file = open('mapping.txt', 'r')
Lines = file.readlines()
for line in Lines:
    string_old = line.strip().split(":")[0]
    string_new =  line.strip().split(":")[-1]
    tracker[string_new] =  string_old
file.close()


for dim1 in range(x):
    for dim2 in range(y):
        for dim3 in range(z):
            string_temp = " " + str(dim1) +"," + str(dim2) + "," + str(dim3)
            Indexes = tracker.get(string_temp)
            ListOfIndexes = Indexes.split(",")
            index1 = ListOfIndexes[0]
            index2 = ListOfIndexes[1]
            index3 = ListOfIndexes[2]
            image[dim1][dim2][dim3] = image[int(index1)][int(index2)[int(index3)]
            #print(tracker.get(string_temp))
mh.imsave('unlocked_image.jpg', image)
plt.imshow(image)
plt.show()

В результате изображение уже не пикселируется, но все еще не выглядит как старое один: original image unlocked picture

Я просто не понимаю, почему изображение не полностью восстановлено и где некоторые данные теряются. У кого-нибудь есть идея? Спасибо за любую помощь ....

...