自发辐射,受激辐射和受激吸收 2021-05-30 17:41 采纳率: 100%
浏览 305
已采纳

python如何精确保存读取到的图片像素

我尝试用opencv、PIL、matplotlib.pyplot读取图片像素,将读取到的像素矩阵保存为图片,再读取时发现像素值有出入,如何精确地保存矩阵为图片呢?

​from typing import Counter

import numpy as np

from PIL import Image

cc = Image.open('ccc.jpg') #打开同目录下的ccc.jpg图片
np.array(cc)
print(type(cc))
cc = np.array(cc)
print(type(cc))
print(cc.shape)
print(cc.dtype)
print(Counter(cc.flatten()))
cc = Image.fromarray(cc)
print(type(cc))
cc.save('cccc.jpg')

cc = Image.open('cccc.jpg')
print(type(cc))
cc = np.array(cc)
print(type(cc))
print(cc.shape)
print(cc.dtype)
print(Counter(cc.flatten()))

import matplotlib.pyplot as plt

cc = plt.imread('ccc.jpg')
print(type(cc))
print(cc.shape)
print(Counter(cc.flatten()))
plt.figure(figsize=(30,40),dpi=1)
plt.gca().xaxis.set_major_locator(plt.NullLocator())
plt.gca().yaxis.set_major_locator(plt.NullLocator())
plt.subplots_adjust(top=1,bottom=0,left=0,right=1,hspace =0,wspace =0)
plt.margins(0,0)
plt.imshow(cc)
plt.axis('off')
plt.savefig('cccc.jpg')

cc = plt.imread('cccc.jpg')
print(type(cc))
print(cc.shape)
print(Counter(cc.flatten()))

import cv2
cc = cv2.imread('ccc.jpg')
print(type(cc))
print(cc.shape)
print(Counter(cc.flatten()))

cv2.imwrite('cccc.jpg', cc)
cc = cv2.imread('cccc.jpg')
print(type(cc))
print(cc.shape)
print(Counter(cc.flatten()))​
  • 写回答

2条回答 默认 最新

  • CSDN专家-黄老师 2021-05-30 18:50
    关注

    你是说图片占用空间大小变了吧?因为你保存jpg图片会做压缩处理,所以图片的大小会变了。

    JPEG做了一件事,就是把这些8x8的小块进行了一个正交变换(离散余弦,DCT变换)。经过变换之后,很多元素会接近0。我们把这些比较小的数值强制设定为0,只保留少量较大的数值,那么需要存储的元素将大大减少。例如原来需要保存64个元素,现在可能只需要保存6个元素,那么文件大小就会显著下降。
    这个过程,并没有对图像的分辨率进行处理,所以不会影响图像的分辨率。

    建议参考:https://www.zhihu.com/question/25554419/answer/31917806

    希望对你有帮助,如有帮助,望采纳,谢谢

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码