Python实现图像信息隐藏
生活随笔
收集整理的這篇文章主要介紹了
Python实现图像信息隐藏
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Python實現(xiàn)圖像信息隱藏
之前學(xué)習(xí)密碼學(xué)的時候老師有提到過『信息隱藏』,現(xiàn)在用圖像的方法嘗試一下。思想是:把信息藏到RGB通道中的B通道,然后利用奇偶性可以恢復(fù)過來
原理
從源圖中提取文字圖像信息,記錄這個文字圖像信息像素點在圖像矩陣中的位置
對載體圖片進(jìn)行預(yù)處理,將B通道的像素值全部設(shè)置成偶數(shù)
把載體圖片中,把第一步已經(jīng)記錄的位置的像素B通道設(shè)置為奇數(shù)
信息解碼的過程就是逆過程,只要找出載體圖片中B通道是奇數(shù)的像素位置,然后統(tǒng)一著色就可以恢復(fù)
實現(xiàn)
一、寫入要隱藏的信息
source = cv2.imread('img/source.png')
h, w = source.shape[:2]
message = 'Hello World!'
x, y = (180, 250)
color = [88, 26, 16]
cv2.putText(source, message, (x, y), cv2.QT_FONT_BLACK, 3, color, thickness=5)
cv2.imwrite('img/s.png', source)
原圖source.png
加入信息后的圖片s.png
二、預(yù)處理載體圖片
carrier = cv2.imread('img/carrier.png')
for i in xrange(h):
for j in xrange(w):
# 把整幅圖的B通道全設(shè)置為偶數(shù)
if carrier[i, j, 0] % 2 == 1:
carrier[i, j, 0] -= 1
三、把隱藏信息的位置設(shè)置成奇數(shù)
for i in xrange(h):
for j in xrange(w):
# 找出有文字的位置
if list(source[i, j]) == color:
carrier[i, j, 0] += 1
cv2.imwrite('img/hide.png', carrier)
加入信息之后的載體圖片與原來幾乎不變
原載體圖片carrier.png
隱藏信息后的圖片hide.png
四、信息恢復(fù)
img = cv2.imread('img/hide.png')
h, w = img.shape[:2]
# 新建一張圖用來放解出來的信息
info = np.zeros((h, w, 3), np.uint8)
for i in xrange(h):
for j in xrange(w):
# 發(fā)現(xiàn)B通道為奇數(shù)則為信息的內(nèi)容
if img[i, j, 0] % 2 == 1:
info[i, j, 0] = 255
info[i, j, 1] = 255
info[i, j, 2] = 255
cv2.imwrite('img/info.png', info)
恢復(fù)結(jié)果info.png
小結(jié)
這種信息隱藏的方法,主要是用『修改像素奇偶性后,圖片變化不明顯』來實現(xiàn)的,感覺非常巧妙。
不過值得注意的是,(隱寫術(shù)
eq 加密),這種信息隱藏的安全性也依賴于算法本身,而不是密碼學(xué)里的『密鑰』。
總結(jié)
以上是生活随笔為你收集整理的Python实现图像信息隐藏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python删除指定天数前的文件_pyt
- 下一篇: pythonweb啥意思_python-