关于图片无损有损格式的坑以及颜色转换 | 信息隐藏 | python

本文介绍了在进行信息隐藏实验时遇到的Python保存和读取图片的问题,特别是png无损格式在信息隐藏中的应用。提到了cv2库在处理图片通道顺序上的差异,以及如何进行彩色到灰度图像的转换。强调在使用信息隐藏技术时,应选择无损压缩的png格式保存图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在用python写学校的信息隐藏实验时,图片保存格式的坑,我跳了两个小时,在此总结一下,防止后人继续入坑


保存图片

python保存图片的函数有(其他还有PIL)

plt.imsave("picture.png",img) # png无损

plt.imsave("picture.jpg",img) # jpg有损压缩

cv2.imwrite("picture.jpg",img) # jpg有损压缩

无损保存图片的格式是png格式
在信息隐藏中,通过 cv2.imwriteplt.imsave 保存 png 格式图片,可以将加密后的数据无变动的存储到图像中


读取图片

通过 cv2.imreadplt.imread 读取 png 格式图片,可以按原格式读取加密后的图片

cv2 读取图片通道顺序问题

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)

jpg有损压缩后的灰度图


读取无损压缩图片中的数据

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

img = cv2.imread("target.png")
print("图片尺寸 : ",img.shape)
print(img)

png无损压缩后的灰度图


小结

使用信息隐藏技术,在图片中嵌入数据时,需要注意使用 无损压缩 保存图片

使用 python 注意使用 png无损压缩格式 保存图片

  • cv2.imwrite("xxx.png", image)
  • plt.imsave("xxx.png", image)

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值