Imageio или OpenCv сохраняет черное пустое изображение после изменения массива изображений - PullRequest
1 голос
/ 24 апреля 2019

Хорошо, я пытаюсь сделать своего рода простое шифрование изображения для своего проекта в колледже, все, что мне нужно сделать, это открыть изображение в виде массива и увеличить значения пикселей с помощью целочисленного ключа , затемсохраните его как 16-битное изображение, затем откройте это изображение и.Но всякий раз, когда я увеличиваю пиксели, результат превращается в искаженное изображение, которое имеет только оттенки черного, и когда я пытаюсь получить исходное изображение, выполняя обратное (уменьшая пиксели с помощью того же целочисленного ключа), это приводит к полное черное пустое изображение .Размеры верны, но все данные, кажется, потеряны (хотя, когда я печатаю матрицы, значения кажутся правильными).

Я пытался использовать Imageio с плагином freeimage и открыть cv, но ничего не работает,Я также новичок, поэтому я не знаю, пропускаю ли я что-то еще


from tkinter import filedialog
from tkinter import *
from PIL import Image
import cv2 as cv
import os
import numpy as np


def encrypt(k):

    iload = filedialog.askopenfilename(parent=Main,initialdir=os.getcwd(),title="Please select a file:",filetypes = (("PNG files","*.png"),("jpeg files","*.jpg"),("all files","*.*")))
    im= cv.imread(iload,cv.IMREAD_UNCHANGED)
    im = im.astype(np.uint16)   
    print("After Open File Type : ",im.dtype)
    print("Orinigal Image : ",im)   
    im = im.tolist()
    for l in range(len(im)):    
        for j in range(len(im[l])):
            for i in range(len(im[l][j])):
                im[l][j][i]+=k
    #im.putdata(npxls)
    im=np.array(im).astype(np.uint16)
    #imen.show()
    print("Encrypted Image : ",im)  
    #imageio.imwrite("encrypted.png",im,format='PNG-FI')
    cv.imwrite("encrypted.png",im)  
    img=cv.imread("encrypted.png",cv.IMREAD_UNCHANGED | cv.IMREAD_ANYCOLOR | cv.IMREAD_ANYDEPTH)    
    print("After Encrypting Saved File Type :",img.dtype)

def decrypt(k):

    iload = filedialog.askopenfilename(parent=Main,initialdir=os.getcwd(),title="Please select a file:",filetypes = (("PNG files","*.png"),("jpeg files","*.jpg"),("all files","*.*")))
    im=cv.imread(iload, cv.IMREAD_UNCHANGED | cv.IMREAD_ANYCOLOR | cv.IMREAD_ANYDEPTH)
    print("Original Image : ",im)
    print("After Decrypting Image Type: ",im.dtype)
    im = im.astype(np.uint16)   
    im = im.tolist()
    for l in range(len(im)):    
        for j in range(len(im[l])):
            for i in range(len(im[l][j])):
                im[l][j][i]-=k
    im=np.array(im).astype(np.uint16)
    #imen.show()
    print("Decrypted Image : ",im)  
    cv.imwrite("decrypted.png",im,[CV_LOAD_IMAGE_ANYDEPTH ])    
    img=cv.imread("decrypted.png", cv.IMREAD_ANYCOLOR | cv.IMREAD_ANYDEPTH)
    print("After Decrypting Saved Image type: ",img.dtype)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...