在用python写学校的信息隐藏实验时,图片保存格式的坑,我跳了两个小时,在此总结一下,防止后人继续入坑
python保存图片的函数有(其他还有PIL)
plt.imsave("picture.png",img) # png无损
plt.imsave("picture.jpg",img) # jpg有损压缩
cv2.imwrite("picture.jpg",img) # jpg有损压缩
无损保存图片的格式是png格式
在信息隐藏中,通过 cv2.imwrite
或 plt.imsave
保存 png 格式图片,可以将加密后的数据无变动的存储到图像中
通过 cv2.imread
或 plt.imread
读取 png 格式图片,可以按原格式读取加密后的图片
cv2读取的图片通道顺序为BGR,而我们常用的格式是RGB,需要置换通道顺序
'''
cv2方法
'''
import cv2
src = cv2.imread("target.png") #读取彩色*BGR*图,根据需要转成RGB
src = cv2.cvtColor(src, cv2.COLOR_BGR2RGB)
# src = src[:,:,[2,1,0]] # 作用相同, BGR -> RGB 以B为例,要把第一个通道1对应到第二个图片的3上,即从0到2(需要从0开始,下标-1)
灰度图像读取
cv2 风格
import cv2
'''
cv2 风格
'''
src = cv2.imread("target.png",cv2.IMREAD_GRAYSCALE) #读取灰度图
matplot 风格
'''
matplot 风格
'''
import matplotlib.pyplot as plt
src = plt.imread("target.png") # 默认彩色通道
plt.imshow('lena_1', cmap='Greys_r') # 显示灰度图
灰度转换
image = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
实例
读取bmp彩色图片,转为灰度图加密后图像原数据:
使用jpg有损压缩,读取后的图片数据:
src = cv2.imread("source.bmp",cv2.IMREAD_GRAYSCALE)
'''
经过一系列的处理
dst 为处理后的结果
'''
cv2.imwrite("target.jpg", dst)
img = src = cv2.imread("target.jpg",cv2.IMREAD_GRAYSCALE)
print(img)
使用png无损压缩,读取后的图片数据:
img = cv2.imread("target.png")
print("图片尺寸 : ",img.shape)
print(img)
使用信息隐藏技术,在图片中嵌入数据时,需要注意使用 无损压缩 保存图片
使用 python 注意使用 png无损压缩格式 保存图片
cv2.imwrite("xxx.png", image)
plt.imsave("xxx.png", image)