【问题标题】:How to get border pixels of an image in python?如何在python中获取图像的边框像素?
【发布时间】:2018-05-26 02:52:13
【问题描述】:

我有一张图片,使用隐写术我只想将数据保存在边框像素中。

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

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

【问题讨论】:

  • 这可能会有所帮助 - github.com/RobinDavid/LSB-Steganography
  • 边框像素...在图像数组的第一行和最后一行/列中?你觉得它有什么难处?
  • 我认为只需使用 numpy 切片,您就可以在几秒钟内获得它们......

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


【解决方案1】:

访问边框像素并在其中输入数据。 图像的形状由 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)

【讨论】:

    【解决方案2】:

    获取边界像素:

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

    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 填充矩形)。您可以找到函数 here 的文档。

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

    .

    输入图像是:

    你现在有了边框像素!

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

    我在 Matlab 中做过,不太确定在 python 中做。在 Matlab 中, 函数“bitget(image, 1)”返回图像的 LSB。我发现了一个关于使用 python here 进行位平面切片的问题。虽然没有得到答复,但您可能想查看发布的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-31
      • 2022-09-23
      • 2016-12-19
      • 2019-05-11
      • 2020-07-23
      • 1970-01-01
      • 2014-05-02
      相关资源
      最近更新 更多