python 信息隐藏 图片格式的坑以及灰度转换

在用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)

jpg有损压缩后的灰度图
使用png无损压缩,读取后的图片数据:

cv2.imwrite("target.png", dst)

png无损压缩后的灰度图
信息隐藏技术使用python注意使用png无损压缩格式保存图片

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章