如何在python中获取图像的边框像素?

时间:2017-12-12 12:09:02

标签: python image python-2.7 opencv image-processing

我有一个图像,使用隐写术我想仅以边框像素保存数据。

换句话说,我只希望将数据保存在图像边框像素的最低有效位(LSB)中。

有没有办法让边框像素在边框像素中存储数据(最多15个字符文本)? Plz,帮帮我......

2 个答案:

答案 0 :(得分:0)

获取BORDER PIXELS:

屏蔽操作是获取图像边框像素的众多方法之一。代码如下:

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函数绘制一个零的矩形。第一个参数是您要绘制的图像,第二个参数是start(x,y)点,第三个参数是end(x,y)点。第四个参数是颜色,' - 1表示绘制的矩形的厚度(-1填充矩形)。您可以找到函数here的文档。

现在我们有了掩码,你可以使用'cv2.bitwise_and'(文档)函数对像素执行AND操作。基本上发生的是,掩模中具有“1”像素的像素保留其像素值。掩码中带有'0'像素的AND的像素为0.这样,您将获得如下输出:

here

输入图片是:

enter image description here

你现在有边框像素!

使用LSB平面存储您的信息不是一个好主意。当你想到它时,它是有道理的。简单的有损压缩会影响大多数隐藏数据。将图像保存为JPEG会导致信息丢失或受影响严重的信息。如果您仍想尝试LSB,请查看位平面切片。通过位平面切片,您基本上可以获得图像的位平面(从MSB到LSB)。 enter image description here(来自researchgate.net的图片)

我已经在Matlab中完成了它并且不太确定在python中这样做。在Matlab中, 函数'bitget(image,1)'返回图像的LSB。我发现了一个关于使用python here的位平面切片的问题。虽然没有答案,但您可能需要查看已发布的代码。

答案 1 :(得分:0)

访问边框像素并在其中输入数据。 通过t = img.shape访问图像的形状。它返回行数,列数和通道数的元组。组件是RGB,分别是1,2,3.int(r [0])是可变的,其中存储了一个值。

$result = $db->query("SELECT title,id,meta_d,meta_k,text,page FROM `settings`");