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

在用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彩色图片,转为灰度图加密后图像原数据:
关于图片无损有损格式的坑以及颜色转换 | 信息隐藏 | python_第1张图片
使用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)

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


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

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

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

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


小结

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

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

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

参考资料

  • 灰度转换参考网址链接
    Python OpenCV | cv2.cvtColor() method

你可能感兴趣的:(Python,图像处理,信息隐藏)