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

问题描述 投票:-3回答:2

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

换句话说,我想仅在图像的边界像素的最低有效位(LSB)中保存数据。

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

python image python-2.7 opencv image-processing
2个回答
0
投票

获得边界像素:

掩蔽操作是获得图像的边界像素的许多方式之一。代码如下:

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的位平面切片的问题。虽然没有答案,但您可能需要查看已发布的代码。


0
投票

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

import cv2
img = cv2.imread('xyz.png')
t = img.shape
print(t)
component = 2
img.itemset((0,0,component),int(r[0]))
img.itemset((0,t[1]-1,component),int(r[1]))
img.itemset((t[0]-1,0,component),int(r[2]))
img.itemset((t[0]-1,t[1]-1,component),int(r[3]))

print(img.item(0,0,component))
print(img.item(0,t[1]-1,component))
print(img.item(t[0]-1,0,component))
print(img.item(t[0]-1,t[1]-1,component))
cv2.imwrite('output.png',img)
© www.soinside.com 2019 - 2024. All rights reserved.