Imageio或OpenCv更改图像阵列后保存黑色空白图像

时间:2019-04-24 13:25:57

标签: python opencv encryption 16-bit python-imageio

好的,我正在尝试为我的大学项目进行某种简单的图像加密,我要做的就是将图像作为一个numpy数组打开,并通过整数键增加像素值,然后将其保存为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)

我只需要通过向像素值添加一个键来更改图像,就可以通过反向操作将其更改回去。

0 个答案:

没有答案