所以我想在另一个黑白图像中编码一个秘密图像。该图像的大小必须与我们试图在其中隐藏秘密图像的原始图像大小相同,因此对于这两个图像,我们具有对应的像素。
编码秘密图像:
如果机密图像中的像素为白色(因此,RGB值为[255、255、255]),请向蓝色分量(最后一个数字)加1。
否则,请离开蓝色组件未受影响。
因此,通过使用原始图像中更改的蓝色成分,彩色图像基本上隐藏在黑白图像中。
解码黑白图像是通过反转编码过程来完成的。
所以可以说我目前有以下像素列表:
P = [[0, 0, 0], [255, 255, 255], [255, 184, 254], [255, 0, 254]]
假设两个图像的宽度和高度相同。
我将如何检查P中的任何“像素”是否等于255?因此,这意味着“像素”中的所有3个数字必须等于255。
您可以使用
for idx,lst in enumerate(P):
if lst==[255,255,255]:
print(idx,lst)
或
enc_P=[]
for lst in P:
if lst==[255,255,255]:
print(lst)
enc_P.append(lst)
这里是您可以检查内部列表中的所有值是否等于255并返回内部列表在P中的索引的方法:
P = [[0, 0, 0], [255, 255, 255], [255, 184, 254], [255, 0, 254]]
def checker(P):
for subP in P:
if subP[1:] == subP[:-1] and subP[0] == 255:
return subP, P.index(subP)
checker(P)
numpy
为基础的方法将是最快的。
使用numpy
,您可以执行以下操作:
>>> import numpy as np
>>> P = np.array(P)
>>> np.all((P == 255), axis=1)
array([False, True, False, False])
P = [[0, 0, 0], [255, 255, 255], [255, 184, 254], [255, 0, 254]]
count = 0
for i in range(len(P)):
for j in range(len(P[i])):
if P[i][j] == 255:
count += 1
if count == 3:
print(i)
count = 0
这样,您可以在2D列表中找到包含特定值的所有索引。
上面的代码打印1,因为只有索引1中的P包含列表[255,255,255]