我有一个图像,使用隐写术我只想将数据保存在边框像素中。
换句话说,我只想将数据保存在图像边界像素的最低有效位 (LSB) 中。
有没有办法让边框像素在边框像素中存储数据(最多 15 个字符的文本)?lz,帮帮我...
获取边界像素:
掩蔽操作是获取图像边界像素的多种方法之一。代码如下:
a= cv2.imread('cal1.jpg')
bw = 20 //width of border required
mask = np.ones(a.shape[:2], dtype = "uint8")
cv2.rectangle(mask, (bw,bw),(a.shape[1]-bw,a.shape[0]-bw), 0, -1)
output = cv2.bitwise_and(a, a, mask = mask)
cv2.imshow('out', output)
cv2.waitKey(5000)
在获得与输入图像尺寸相同的数组后,我使用 cv2.rectangle 函数绘制一个由零组成的矩形。第一个参数是您要绘制的图像,第二个参数是起点 (x,y) 点,第三个参数是终点 (x,y) 点。第四个参数是颜色,'-1' 表示绘制的矩形的厚度(-1 填充矩形)。您可以在此处找到该函数的文档。
现在我们有了掩码,您可以使用“cv2.bitwise_and”(文档)函数对像素执行 AND 运算。基本上发生的情况是,与掩码中的“1”像素与的像素保留其像素值。掩码中与“0”像素为“与”的像素为 0。这样您将获得如下输出:
输入图像是:
你现在有边框像素了!
使用 LSB 平面来存储您的信息不是一个好主意。当你考虑它时,这是有道理的。简单的有损压缩会影响您的大部分隐藏数据。将图像保存为 JPEG 会导致信息丢失或严重影响信息。如果您仍想尝试 LSB,请查看位平面切片。通过位平面切片,您基本上可以获得图像的位平面(从 MSB 到 LSB)。(图片来自 researchgate.net)
我已经在 Matlab 中完成了它,但不太确定在 python 中完成它。在 Matlab 中,函数 'bitget(image, 1)' 返回图像的 LSB。我在这里发现了一个关于使用 python 进行位平面切片的问题。虽然没有得到答复,但您可能想查看已发布的代码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句