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無損壓縮格式保存圖片

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