在用python写学校的信息隐藏实验时,图片保存格式的坑,我跳了两个小时,在此总结一下,防止后人继续入坑
保存图片
python保存图片的函数有(其他还有PIL)
plt.imsave("picture.png",img) # png无损
plt.imsave("picture.png",img) # png无损
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 = src[:,:,[2,1,0]] # BGR -> RGB 以B为例,要把第一个通道1对应到第二个图片的3上,即从0到2(需要从0开始,下标-1)
src = cv2.imread("target.png",cv2.IMREAD_GRAYSCALE) #读取灰度图
'''
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)
...
cv2.imwrite("target.jpg", dst)
使用png无损压缩,读取后的图片数据:
cv2.imwrite("target.png", dst)
信息隐藏技术使用python注意使用png无损压缩格式保存图片
- 灰度转换参考网址链接
Python OpenCV | cv2.cvtColor() method