Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Imageio或OpenCv在更改图像阵列后保存黑色空白图像_Python_Opencv_Encryption_16 Bit_Python Imageio - Fatal编程技术网

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

Python Imageio或OpenCv在更改图像阵列后保存黑色空白图像,python,opencv,encryption,16-bit,python-imageio,Python,Opencv,Encryption,16 Bit,Python Imageio,好的,我正在尝试为我的大学项目做一种简单的图像加密,我需要做的就是打开一个图像作为一个numpy数组,用一个整数键增加像素值,然后将其保存为16位图像,然后打开该图像并保存。但每当我增加像素时,结果就会变成只有黑色阴影的变形图像,当我试图通过使用相同的整数键对像素执行反向递减来获得原始图像时,它会生成一个全黑色的空白图像。尺寸是正确的,但所有的数据似乎都丢失了,尽管当我打印矩阵时,值似乎是正确的 我尝试过使用Imageio和freeimage插件,并打开了cv,但似乎没有任何效果。我也是一个傻瓜

好的,我正在尝试为我的大学项目做一种简单的图像加密,我需要做的就是打开一个图像作为一个numpy数组,用一个整数键增加像素值,然后将其保存为16位图像,然后打开该图像并保存。但每当我增加像素时,结果就会变成只有黑色阴影的变形图像,当我试图通过使用相同的整数键对像素执行反向递减来获得原始图像时,它会生成一个全黑色的空白图像。尺寸是正确的,但所有的数据似乎都丢失了,尽管当我打印矩阵时,值似乎是正确的

我尝试过使用Imageio和freeimage插件,并打开了cv,但似乎没有任何效果。我也是一个傻瓜,所以我不知道我是否错过了什么

从tkinter导入文件对话框 从tkinter进口* 从PIL导入图像 将cv2作为cv导入 导入操作系统 将numpy作为np导入 def encryptk: iload=filedialog.askopenfilenameparent=Main,initialdir=os.getcwd,title=请选择一个文件:,文件类型=PNG文件,*.PNG,jpeg文件,*.jpg,所有文件,** im=cv.imreadiload,cv.IMREAD\u不变 im=im.astypenp.uint16 打开后打印文件类型:,im.dtype 打印图像:,即时消息 im=im.tolist 对于rangelenim中的l: 对于rangelenim[l]中的j: 对于我在rangelenim[l][j]: im[l][j][i]+=k im.putdatanpxls im=np.arrayim.astypenp.uint16 伊门秀 打印加密图像:,即时消息 imageio.imwriteencrypted.png,im,format='png-FI' cv.imwriteencrypted.png,im img=cv.imreadencrypted.png,cv.IMREAD_不变| cv.IMREAD_ANYCOLOR | cv.IMREAD_ANYDEPTH 加密保存的文件类型后打印:,img.dtype def decryptk: iload=filedialog.askopenfilenameparent=Main,initialdir=os.getcwd,title=请选择一个文件:,文件类型=PNG文件,*.PNG,jpeg文件,*.jpg,所有文件,** im=cv.imreadiload,cv.IMREAD_不变| cv.IMREAD_ANYCOLOR | cv.IMREAD_ANYDEPTH 打印原始图像:,即时消息 解密后打印图像类型:,im.dtype im=im.astypenp.uint16 im=im.tolist 对于rangelenim中的l: 对于rangelenim[l]中的j: 对于我在rangelenim[l][j]: im[l][j][i]-=k im=np.arrayim.astypenp.uint16 伊门秀 打印解密图像:,即时消息 cv.imwritedecrypted.png,im,[cv\u LOAD\u IMAGE\u ANYDEPTH] img=cv.imreaddecrypted.png,cv.IMREAD_ANYCOLOR | cv.IMREAD_ANYDEPTH 解密保存的图像类型后打印,img.dtype
我只需要通过向像素值添加一个键来更改图像,这样我就可以通过反向操作将其更改回来。

您不需要所有这些慢循环,只需使用im+=k。读取时,只需使用cv.IMREAD_UNCHANGED而不使用其他标志。如果不使用cv.IMREAD_ANYDEPTH,则会按以下方式打开文件:8bit@SattwikRoy考虑到cv2.IMREAD_UNCHANGED的值为-1,您可以按位或按任意方式使用它,结果仍然相同-1.您不需要所有这些慢循环,只需使用im+=k。读取时,只需使用cv.IMREAD\u UNCHANGED,而不使用其他标志。如果不使用cv.IMREAD\u ANYDEPTH,它将以8bit@SattwikRoy考虑到cv2.IMREAD_UNCHANGED的值为-1,您可以按位或按任意方式使用它,结果仍然相同-1.